跳转到内容

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 属性会将 activepending 状态的匹配逻辑更改为仅匹配 NavLinksto 路径的结尾。如果 URL 比 to 长,则将不再被视为活动状态。

LinkURLisActive
<NavLink to="/tasks" />/taskstrue
<NavLink to="/tasks" />/tasks/123true
<NavLink to="/tasks" end />/taskstrue
<NavLink to="/tasks" end />/tasks/123false

<NavLink to="/"> 是一个例外情况,因为每个 URL 都匹配 /。为了避免默认匹配每条路由,它会有效地忽略 end 属性,并且仅在您位于根路由时匹配。

caseSensitive

添加 caseSensitive 属性会改变匹配逻辑,使其区分大小写。

LinkURLisActive
<NavLink to="/SpOnGe-bOB" />/sponge-bobtrue
<NavLink to="/SpOnGe-bOB" caseSensitive />/sponge-bobfalse

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> 的所有其他属性均受支持。