Wes*_*Loh 5 reactjs react-router redux react-redux
我正在努力解决项目中的重新渲染问题。首先,我在将用户重定向到登录页面之前检查 cookie。我正在使用具有这种结构的 Redux Store。
var initialState = {
user: {
auth: false,
isFetching: false,
isTokenFetching: false
}
}
Run Code Online (Sandbox Code Playgroud)
抓取是通过登录表单登录,令牌抓取是通过cookie中的Token登录
我正在使用自定义的动态路线来使其根据此条件进行渲染。(isFetching是指正在获取token时)
const DynamicRoute = ({isFetching,isAuthenticated, ...rest}) => {
return isFetching ? <h1>Fetching</h1> : (
<Route {...rest} render={(props) =>{
return isAuthenticated ?
<HomePage/> :
<LogInPage/>}}/>
)
}
Run Code Online (Sandbox Code Playgroud)
该函数在分派操作之前调用,因此它首先渲染LogInPage,并在分派操作时获取,并在令牌有效时再次渲染HomePage 。
我如何确保它只呈现LogInPage和HomePage一次。例如,如果令牌有效(仅限主页),如果令牌无效(仅限登录页面)
我希望这个动态路由能够工作,因为我希望对这两种情况都使用 URL。
抱歉,如果我的解释不好
isAuthenticated为 true,我们应该将用户重定向到HomePage,不是吗?return isAuthenticated ? <HomePage/> : <LogInPage/>;
Run Code Online (Sandbox Code Playgroud)
我如何确保它只呈现 LogInPage 和 HomePage 一次。
使用Redirect组件将用户重定向回LogInPage如下所示:
return isAuthenticated ? <HomePage/> : <Redirect to="/login" />;
Run Code Online (Sandbox Code Playgroud)
您可以Redirect从以下位置获取该组件react-router-dom:
import { Redirect } from "react-router-dom";
Run Code Online (Sandbox Code Playgroud)
我假设您已经像这样定义了路由器:
<Route path="/login" component={LogInPage} />
Run Code Online (Sandbox Code Playgroud)
基本上,你的路由器会变成这样:
<Route path="/login" component={LogInPage} />
<PrivateRoute path="/home" component={HomePage} />
Run Code Online (Sandbox Code Playgroud)