不能用 Link 包装 Menu.Item

Can't wrap a Menu.Item with Link

我目前正在为各个菜单项使用 Menu for my main header navigation, with Menu.Item 组件。

目前,代码如下所示:

<Menu>
    <Menu.Item>
        <span className="nav-text">
            <Link href="/login">
                <a>Login</a>
            </Link>
        </span>
    </Menu.Item>
    <Menu.Item>
        <span className="nav-text">
            <Link href="/register">
                <a>Register</a>
            </Link>
        </span>
    </Menu.Item>
</Menu>

这使得 LoginRegister 跨度可点击,但不是菜单项本身。当试图向上移动 Linka 标签以包含整个 Menu.Item -

<Menu>
    <Link href="/login">
        <a>
            <MenuItem>
                <span className="nav-text">
                    Login
                </span>
            </MenuItem>
        </a>
    </Link>
    <Link href="/register">
        <a>
            <MenuItem>
                <span className="nav-text">
                    Register
                </span>
            </MenuItem>
        </a>
    </Link>
</Menu>

整个菜单被隐藏并替换为 ···:

我不确定如何解决这个问题并使菜单正确呈现且菜单项可点击,因此我很乐意就此获得一些帮助。

您的 Link 组件语法无效。你应该这样使用: <Link to="/register">Register</Link>

将您的代码更改为:

import {Link} from "react-router-dom";
...
      <Menu mode="horizontal">
        <Menu.Item key="login">
          <Link to="/login">
            <span className="nav-text">Login</span>
          </Link>
        </Menu.Item>

        <Menu.Item key="register">
          <Link to="/register">
            <span className="nav-text">Register</span>
          </Link>
        </Menu.Item>
      </Menu>

这个问题似乎以某种方式自行解决了,之前我遇到了另一个我目前无法重现的问题。

您可以使用 'next/router' 中的挂钩“useRouter”来管理 Link 不够用的链接。

在这种情况下,您可以在 的 onClick 事件中使用 router.push({YOUR_ROUTE})。

import React from 'react';
import {useRouter} from 'next/router';
import {Menu} from 'antd';

const UsingRouterHook: React.FC = () => {

    const router = useRouter();

    return (
        <Menu mode="horizontal" onClick={() => router.push('/login')}>
            <Menu.Item key="login" >
                <span className="nav-text">Login</span>
            </Menu.Item>

            <Menu.Item key="register" onClick={() => router.push('/register')}>
                <span className="nav-text">Register</span>
            </Menu.Item>
        </Menu>
    );
}

export default UsingRouterHook;

如果您使用的是 React,则可以将 Menu.Item 组件包裹在 Link 标签周围。

import {Link} from "react-router-dom";
...
  <Link to="#">
    <Menu.Item>Your Content</Menu.Item> 
  </Link>