next.js 如何对各种链接组件的不同hrefs进行prop-drill,直到原始链接组件?

yqkkidmi  于 2022-12-03  发布在  其他
关注(0)|答案(1)|浏览(118)

[* 解决方案 *]

@Nikhil bhatia建议的工作解决方案如下。
查看下面的原始帖子,了解其他想法。
第一个

原始帖子

问题

我有一个组件,它应该是我想要如何显示链接列表的方案。这些链接根据我当前所在的网站而不同。
在主页上,我可以从aboutprojectsblog中选择。根据我点击的内容,我希望相应的网站显示2个链接到其他2个页面。

因此... 3个页面中的每个页面的linkname + href属性都会发生变化。
到目前为止,我将linkname传递给link-component,但是如何传递href呢?

问题

如何从单个href向下钻取到原始链接组件?

目前为止我的解决方案

链接组件

我已经尝试了如下模板文字:

<Link href=`/{linkA_Url}`>{linkA}</Link>

第一个

单个组件

页面about,projects,blog使用上面显示的TopNav组件。下面是about-page的例子。我传递了链接的名称,但是我如何传递href呢?
应该是这样的
<TopNav href="/projects" href="/blog" linkA="projects" linkB="blog" /> href props显然需要不同的名称,因此问题就从这里开始。
一个
Link to Codesandbox
如果主页面没有显示3个链接about,projects & blog居中,重新加载预览窗口。这是另一个问题,我还没有设法解决。I've created a separate question for that

wwwo4jvm

wwwo4jvm1#

you can refractor TopNav like this

export default function TopNav(props) {
    const { data } = props

    return (
      <StyledDiv>
        <nav>
          <ul>
            {data.map(item => <StyledLi key={item.name} >
              <Link href={item.href}>{item.name}</Link>
            </StyledLi> )}
          </ul>
        </nav>
      </StyledDiv>
    );
}

now you can use it like <TopNav data={[{href: "/abc", name: "ABC"}, {href: "/xyz", name: "XYZ"}]} />
you can either use it on every page with different props,
or
you can use it on top level _app.jsx and give conditional data props to TopNav, you can get pathname from useRouter and depending upon the path name change data prop
example

const App = () => {
 const { asPath } = useRouter()
 const getData = () => {
   if (asPath === "/url1") {
     return [{href: "/abc", name: "ABC" }]
   }
   if (asPath === "/url2") {
     return [{href: "/xyz", name: "XYZ" }]
   }
   return [{href: "/wsad", name: "WSAD" }]
 }
  return(
   <>
    <TapNav data={getData()} />    
    {otherComp}
   </>
  )
}

相关问题