NavLink
<NavLink>
使用附加道具包装 <Link>
,以设置活动状态和待处理状态的样式。
import { NavLink } from "@remix-run/react";
<NavLink to="/messages" className={({ isActive, isPending }) => isPending ? "pending" : isActive ? "active" : "" }> Messages</NavLink>
自动属性
.active
当 <NavLink>
组件处于活动状态时,会向其添加一个 active
类,因此您可以使用 CSS 来设置其样式。
<NavLink to="/messages" />
a.active { color: red;}
aria-current
当 NavLink
处于活动状态时,它将自动将 <a aria-current="page">
应用于底层锚标记。请参阅 MDN 上的 aria-current
。
.pending
当导航期间 <NavLink>
组件处于待处理状态时,会向其添加一个 pending
类,因此您可以使用 CSS 来设置其样式。
<NavLink to="/messages" />
a.pending { color: red;}
.transitioning
在导航过程中转换时,会向 <NavLink viewTransition>
组件添加一个 transitioning
类,因此您可以使用 CSS 来设置其样式。
<NavLink to="/messages" viewTransition />
a.transitioning { view-transition-name: my-transition;}
Props
className
回调
使用活动和待定状态进行回调以允许自定义所应用的类名。
<NavLink to="/messages" className={({ isActive, isPending }) => isPending ? "pending" : isActive ? "active" : "" }> Messages</NavLink>
style
回调
使用活动和待定状态进行回调以允许自定义所应用的样式。
<NavLink to="/messages" style={({ isActive, isPending }) => { return { fontWeight: isActive ? "bold" : "", color: isPending ? "red" : "black", }; }}> Messages</NavLink>
children
回调
使用活动和待定状态进行回调以允许自定义 <NavLink>
的内容。
<NavLink to="/tasks"> {({ isActive, isPending }) => ( <span className={isActive ? "active" : ""}>Tasks</span> )}</NavLink>
end
end
属性会将 active
和 pending
状态的匹配逻辑更改为仅匹配 NavLinks
的 to
路径的结尾
。如果 URL 比 to
长,则将不再被视为活动状态。
Link | URL | isActive |
---|---|---|
<NavLink to="/tasks" /> | /tasks | true |
<NavLink to="/tasks" /> | /tasks/123 | true |
<NavLink to="/tasks" end /> | /tasks | true |
<NavLink to="/tasks" end /> | /tasks/123 | false |
<NavLink to="/">
是一个例外情况,因为每个 URL 都匹配 /
。为了避免默认匹配每条路由,它会有效地忽略 end
属性,并且仅在您位于根路由时匹配。
caseSensitive
添加 caseSensitive
属性会改变匹配逻辑,使其区分大小写。
Link | URL | isActive |
---|---|---|
<NavLink to="/SpOnGe-bOB" /> | /sponge-bob | true |
<NavLink to="/SpOnGe-bOB" caseSensitive /> | /sponge-bob | false |
viewTransition
viewTransition
属性通过将最终状态更新包装在 document.startViewTransition()
中来为此导航启用 视图转换。默认情况下,在转换期间,transitioning
类 将添加到 <a>
元素,您可以使用它来自定义视图转换。
a.transitioning p { view-transition-name: "image-title";}
a.transitioning img { view-transition-name: "image-expand";}
<NavLink to={to} viewTransition> <p>Image Number {idx}</p> <img src={src} alt={`Img ${idx}`} /></NavLink>
您还可以使用 className
/style
属性或传递给 children
的渲染属性,根据 isTransitioning
值进一步自定义。
<NavLink to={to} viewTransition> {({ isTransitioning }) => ( <> <p style={{ viewTransitionName: isTransitioning ? "image-title" : "", }} > Image Number {idx} </p> <img src={src} alt={`Img ${idx}`} style={{ viewTransitionName: isTransitioning ? "image-expand" : "", }} /> </> )}</NavLink>
<Link>
属性
<Link>
的所有其他属性均受支持。