Skip to content

导航

使用 <Link><NavLink>useNavigate 来进行导航。

该组件适用于那些需要渲染激活状态的导航链接。

tsx
import { NavLink } from "react-router";

export function MyAppNav() {
  return (
    <nav>
      <NavLink to="/" end>
        Home
      </NavLink>
      <NavLink to="/trending" end>
        Trending Concerts
      </NavLink>
      <NavLink to="/concerts">All Concerts</NavLink>
      <NavLink to="/account">Account</NavLink>
    </nav>
  );
}

<NavLink> 处于激活状态时,它会自动拥有一个 .active 类名,以便于使用 CSS 轻松设置样式:

css
a.active {
  color: red;
}

它还在 className(类名)、style(样式)以及 children(子元素)上有回调属性,这些回调属性带有活动状态,可用于内联样式设置或条件渲染。

tsx
// className
<NavLink
  to="/messages"
  className={({ isActive }) => (isActive ? "text-red-500" : "text-black")}
>
  Messages
</NavLink>
tsx
// style
<NavLink
  to="/messages"
  style={({ isActive }) => ({
    color: isActive ? "red" : "black",
  })}
>
  Messages
</NavLink>
tsx
// children
<NavLink to="/message">
  {({ isActive }) => (
    <span className={isActive ? "active" : ""}>
      {isActive ? "👉" : ""} Tasks
    </span>
  )}
</NavLink>

不需要激活样式时,可以使用 <Link> 组件。

tsx
import { Link } from "react-router";

export function LoggedOutMessage() {
  return (
    <p>
      您已退出. <Link to="/login">再次登录</Link>
    </p>
  );
}

useNavigate

这个钩子(hook)允许程序在无需用户交互的情况下将用户导航至新页面。

对于常规导航而言,最好使用 <Link><NavLink>。它们能提供更好的默认用户体验,比如键盘事件、无障碍标签、“在新窗口中打开”、右键上下文菜单等等。

如果用户长时间停留在页面上,并且你希望他们能够导航到其他页面,那么 useNavigate 是一个不错的选择。例如:

  • 表单提交完成之后
  • 用户长时间没有操作退出系统
  • 有时间限制的游戏界面等等场景
tsx
import { useNavigate } from "react-router";

export function LoginPage() {
  let navigate = useNavigate();

  return (
    <>
      <MyHeader />
      <MyLoginForm
        onSuccess={() => {
          navigate("/dashboard");
        }}
      />
      <MyFooter />
    </>
  );
}

Released under the MIT License.