【发布时间】:2019-12-29 07:09:27
【问题描述】:
我正在使用 react-router 设置我的应用程序,并尝试使用<Redirect/> 设置路由器进行身份验证。
Routecomponent 有两个不同的组件,一个是private Route,另一个是public route。
预期结果:当 auth 为 false 时,页面应该跳转回我设置的公共页面 <Redirect to={"/public"} />
到目前为止,似乎路由工作正常,但重定向不能正常工作。
欢迎任何想法!谢谢!!
PrivateRoute
interface PrivateRouteProps {
isLogin: boolean;
privateRoutes: RouteItem[];
}
const PrivateRoute: React.FunctionComponent<PrivateRouteProps> = (
props: PrivateRouteProps
) => {
return (
<>
{props.isLogin ? (
props.privateRoutes.map(item => {
return <Route key={item.path} {...item} />;
})
) : (
<Redirect to={PUBLIC.path} />
)}
</>
);
};
PublicRoute
interface PublicProps {
publicRoutes: RouteItem[];
}
const PublicRoute: React.FC<PublicProps> = (props: PublicProps) => {
return (
<>
{props.publicRoutes.map(route => (
<Route key={route.path} {...route} />
))}
</>
);
};
Route
<BrowserRouter>
<Switch>
<PublicRoute publicRoutes={publicRoutes} />
<PrivateRoute privateRoutes={privateRoutes} isLogin={login} />
</Switch>
</BrowserRouter>
更新
正如公认的答案所提到的,这完全是关于 <Switch/> 与片段一起使用,所以我修改了我的路线如下,它就像一个魅力。
只需更新它,因为有人可能有类似的问题。
<BrowserRouter>
<Switch>
{publicRoutes.map(item => {
return <Route key={item.path} {...item}/>
})}
{privateRoutes.map(item => {
return <PrivateRoute key={item.path}
exact={item.exact}
component={item.component}
path={item.path}
redirectPath={SIGN_IN.path}
/>
})}
</Switch>
</BrowserRouter>
【问题讨论】:
-
你能告诉我们你的公共路由组件和你的私有路由道具吗?
-
嗨@iwaduarte,感谢您的回复!公共和私人路线道具只是
<Route />需要的道具。我认为他们可能与这个问题无关,所以我没有发布:) -
您需要
return映射数组,但可能不是您的问题的原因,codeandbox 将有助于回答。 -
嗨@Anuja,感谢您的回复。代码sn-p在这里codesandbox.io/embed/serverless-sunset-8inck
-
@iwaduarte 你好,我将代码更新到代码框,也许你现在可以看看:) 谢谢
标签: reactjs typescript react-router-v4