路由组件
签名
ts
function RouterView(props?: RouterViewProps): ReactNode
type RouterViewProps = {
customRender?: (component: ReactNode, route: RouteLocation) => ReactNode;
};
function RouterLink(props: RouterLinkProps): ReactNode参数
RouterView
customRender(component, route):自定义渲染已匹配组件,可拿到守卫处理后的route。
RouterLink(核心)
to:string | RouterOptionsreplace?: booleanactiveClassName?/exactActiveClassName?activeClass?/exactActiveClass?(别名)inActiveClassName?customRender?/custom?
返回值
RouterView:当前匹配路由的渲染结果。RouterLink:默认输出<Link>,或输出customRender返回节点。
行为细节
RouterView内部集成守卫执行器;customRender拿到的是最终 route。RouterLink自动计算isActive/isExactActive并拼接 class。RouterLink的customRender参数包含href/isActive/isExactActive/navigate。
错误/失败语义
- 在
RouterProvider外使用会触发上下文错误。 to命名路由无效时会在解析阶段抛错。
示例
tsx
import { RouterLink, RouterView } from '@vureact/router';
export default function Layout() {
return (
<div>
<RouterLink to="/home" inActiveClassName="link-idle">
Home
</RouterLink>
<RouterLink
to={{ path: '/profile', query: { tab: 'account' } }}
customRender={({ navigate, isActive }) => (
<button onClick={navigate}>Profile ({String(isActive)})</button>
)}
/>
<RouterView
customRender={(component, route) => (
<section data-route={route.fullPath}>{component}</section>
)}
/>
</div>
);
}