导航

导航

用户使用<Link><NavLink>useNavigate 导航您的应用程序。

此组件用于需要渲染活动状态的导航链接。

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 进行样式设置。

a.active {
  color: red;
}

它还在 classNamestylechildren 上具有回调 props,其中包含活动状态,用于内联样式或条件渲染。

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

当链接不需要活动样式时,使用 <Link>

import { Link } from "react-router";

export function LoggedOutMessage() {
  return (
    <p>
      You've been logged out.{" "}
      <Link to="/login">Login again</Link>
    </p>
  );
}

useNavigate

此 Hook 允许程序员在用户不进行交互的情况下将用户导航到新页面。

对于普通导航,最好使用 LinkNavLink。它们提供了更好的默认用户体验,例如键盘事件、辅助功能标签、“在新窗口中打开”、右键单击上下文菜单等。

useNavigate 的使用保留在用户进行交互但您需要导航的情况下,例如

  • 表单提交完成后
  • 用户在一段时间内不活动后将其注销
  • 计时 UI(例如测验等)。
import { useNavigate } from "react-router";

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

  return (
    <>
      <MyHeader />
      <MyLoginForm
        onSuccess={() => {
          navigate("/dashboard");
        }}
      />
      <MyFooter />
    </>
  );
}
文档和示例 CC 4.0