reactjs - React 中的条件路由
问题描述
如果用户经过身份验证,我只想能够加载组件。通常我有这个PrivateRoute
组件:
const PrivateRoute = ({ component: Component, hasAccess, addUser, ...rest }) => (
<Route
{...rest}
render={props =>
hasAccess === true ? <Component {...props} addUser={addUser} /> : <Redirect to="/" />
}
/>
);
我这样称呼:
<PrivateRoute
hasAccess={hasAccess}
path="/settings"
component={Setting}
/>
但在另一种情况下,我无法重用此代码。所以我决定像这样声明路线:
<Route
createMeeting={createMeeting}
path="/meetings"
component={MeetingRoutes}
render={props =>
createMeeting === true ? <Component {...props} createMeeting={createMeeting} /> : <Redirect to="/" />
} />
如果您问我,它的行为应该与 PrivateRoute 相同,但事实并非如此。相反,我收到了此错误消息:
警告:你不应该在同一条路线上使用
<Route component>
和;将被忽略<Route render>
<Route render>
有人可以向我解释为什么它会给我这个错误吗?我找不到我的问题的解决方案。
解决方案
最好写一个可重用的PrivateRoute
:
const PrivateRoute = ({ component: Component, hasAccess, componentProps = {}, redirectTo = "/", ...rest }) => (
<Route
{...rest}
render={props =>
hasAccess ? <Component {...props} {...componentProps} /> : <Redirect to={redirectTo} />
}
/>
);
所以Settings
你可以像这样使用这条路线:
<PrivateRoute
hasAccess={hasAccess}
path="/settings"
component={Setting}
componentProps={{
addUser: addUser
}}
/>
像MeetingRoutes
这样:
<PrivateRoute
hasAccess={hasAccessToMeetingRoutes}
path="/meetings"
component={MeetingRoutes}
componentProps={{
createMeeting: createMeeting
}}
/>
推荐阅读
- javascript - 来自分支的错误:网络请求无效
- cmd - 在 Azure Pipeline 构建中刷新环境变量
- mysql - 足球数据库 - sql 查询 - 无视图 - 进球数最多的球队
- typeorm - 更漂亮:在同一行中保留装饰器中的多个参数
- android-camera2 - 带有 TextureView/AutoFitTextureView 预览的 Camera2 API 在纵向模式下被拉伸
- lucene - 模糊搜索 - minimumSimilarity 有问题
- javascript - 如果显示弹出窗口,则删除鼠标和键盘活动
- amazon-web-services - Grafana 中的 Kubernetes Pod 和节点没有数据点 - Prometheus Dashboard
- javascript - 使用 Ipc Main 和 Ipc Render 如何发送整个表单?
- jquery - 如何将目标添加到引导树视图中的视图项