0

我有一个带有用于深色背景的白色链接的菜单(用于主页)和带有用于其他所有页面的深色链接的菜单。

无论出于何种生产原因,react/NextJS 都会在第一页加载时忽略它,即使当我控制台路径是“/”时也是如此。有什么建议可以解决这个问题吗?如果我打开并单击主页链接,控制台路径仍然是“/”,我可以获得正确的菜单。

export default function Navigation({menu, className}) {
  const {asPath} = useRouter()

  const router = useRouter()
  const path = router?.asPath // URL from router.
  console.log('path', path)
  if (path === '/') {
    return (
      <>
        {!!menu?.length && (
          <nav className={cn(styles.navigation, className)}>
            <ul className="home">
              {menu.map((item, index) => {
                const children =
                  item.children && item.children.length > 0 ? item.children : ''

                return (
                  <li key={index}>
                    <Link href={item.path}>
                      <a
                        target={item.target ? item.target : '_self'}
                        className={cn(
                          'nav-item',
                          isLinkActive(asPath, item.path) && styles.active
                        )}
                      >
                        {item.label}
                      </a>
                    </Link>
                    {children && (
                      <ul>
                        {children.map((item, index) => {
                          return (
                            <li key={index}>
                              <Link href={item.path}>
                                <a
                                  target={item.target ? item.target : '_self'}
                                  className={cn(
                                    'nav-item',
                                    isLinkActive(asPath, item.path) &&
                                      styles.active
                                  )}
                                >
                                  {item.label}
                                </a>
                              </Link>
                            </li>
                          )
                        })}
                      </ul>
                    )}
                  </li>
                )
              })}
            </ul>
          </nav>
        )}
      </>
    )
  }

  return (
    <>
      {!!menu?.length && (
        <nav className={cn(styles.navigationOther, className)}>
          <ul>
            {menu.map((item, index) => {
              const children =
                item.children && item.children.length > 0 ? item.children : ''

              return (
                <li key={index}>
                  <Link href={item.path}>
                    <a
                      target={item.target ? item.target : '_self'}
                      className={cn(
                        'nav-item',
                        isLinkActive(asPath, item.path) && styles.active
                      )}
                    >
                      {item.label}
                    </a>
                  </Link>
                  {children && (
                    <ul>
                      {children.map((item, index) => {
                        return (
                          <li key={index}>
                            <Link href={item.path}>
                              <a
                                target={item.target ? item.target : '_self'}
                                className={cn(
                                  'nav-item',
                                  isLinkActive(asPath, item.path) &&
                                    styles.active
                                )}
                              >
                                {item.label}
                              </a>
                            </Link>
                          </li>
                        )
                      })}
                    </ul>
                  )}
                </li>
              )
            })}
          </ul>
        </nav>
      )}
    </>
  )
}

Navigation.propTypes = {
  className: PropTypes.string,
  menu: PropTypes.arrayOf(PropTypes.object)
}
4

1 回答 1

0

您需要使用 react-router-dom 中的位置,然后为您的菜单设置特定的 css 类并相应地使用它:

import { useLocation } from 'react-router-dom'

...然后在您的导航栏中使用:

className={location.pathName === '/' ? bright-class-name : dark-class-name}
于 2021-06-30T00:38:54.893 回答