【发布时间】:2019-09-20 23:19:36
【问题描述】:
我正在为公共路线和私人路线编写 HOC。如果路由是私有的并且用户已通过身份验证,则让他/她进入该页面,否则重定向到登录组件。如果路由是公共的并且用户未通过身份验证,则显示页面并显示登录页面,如果用户未通过身份验证但用户已通过身份验证并且仍然进入登录页面,则将用户重定向到根页面。这工作正常。但是如果我使用渲染而不是组件,那么它就不起作用。只有当我从名为 react-router 的组件的 props 中传递组件时,我才能使其工作。
如果用户用户渲染道具,我怎样才能使它工作?
这是我的代码
<Switch>
<PrivateRoute
exact
path="/"
render={() => <Home name="something" />} {/* this does not work */}
/>
<PrivateRoute exact path="/demo" component={Demo} />
<PublicRoute restricted={true} path="/auth" component={Authentication} />
</Switch>
PublicRoute.js
const PublicRoute = ({component: Component, restricted, ...rest}) => {
return (
<Route
{...rest}
render={props =>
isLogin() && restricted ? <Redirect to="/" /> : <Component {...props} />
}
/>
)
}
PrivateRoute.js
const PrivateRoute = ({component: Component, ...rest}) => {
return (
<Route
{...rest}
render={props =>
isLogin() ? <Component {...props} /> : <Redirect to="/auth/login" />
}
/>
)
}
另外,如果有任何需要改进的地方,请向我提出建议。
【问题讨论】:
标签: javascript reactjs react-router-v4