导航
使用 <Link>
、<NavLink>
和 useNavigate
来进行导航。
NavLink
该组件适用于那些需要渲染激活状态的导航链接。
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
不需要激活样式时,可以使用 <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 />
</>
);
}