gpt4 book ai didi

javascript - 根据 React 中的状态重定向用户

转载 作者:搜寻专家 更新时间:2023-11-01 04:35:45 24 4
gpt4 key购买 nike

现在,我的路由器看起来像这样:

<Router history={browserHistory}>
<Route component={Provider}>
<Route path="/" component={AppPage}>
<Route path="login" component={LoginPage}/>
<Route component={LoggedinPage}>
<Route path="onboarding" component={OnboardingPage}/>
<Route component={OnboardedPage}>
<IndexRoute component={HomePage}/>
<Route path="settings" component={SettingsPage}/>
</Route>
</Route>
</Route>
</Route>
</Router>
如果用户未登录,

LoggedinPage 重定向到 /loginOnboardedPage 重定向到 /onboarding如果用户尚未完成入职流程(选择用户名等)。但是,我认为将来可能需要更多这些条件重定向。处理这些条件重定向的最佳方法是什么?是否可以使用一个组件来处理所有重定向?

最佳答案

<Route>我们接受 onEnter路由匹配时调用的钩子(Hook)。钩子(Hook)看起来像这样:

function requireAuth(nextState, replace) {
if (!loggedIn()) {
replace({ pathname: 'login' });
}
}

然后像这样使用它:

<Route path="/" component={AppPage}>
<Route path="home" component={HomePage} onEnter={requireAuth}/>
<Route path="login" component={LoginPage}/>
</Route>

一个更具可组合性的示例,可让您组合多个检查:

function checkAuth() {
if (!loggedIn()) {
return { pathname: 'login' };
}
}

function checkOnboarding() {
if (!completedOnboarding()) {
return { pathname: 'onboarding' };
}
}

function redirect(...checks) {
return function(nextState, replace) {
let result;
checks.some(check => {
result = check();
return !!result;
});
result && replace(result);
};
}

然后结合起来!

<Route path="/" component={AppPage}>
<Route path="home" component={HomePage}
onEnter={redirect(checkAuth, checkOnboarding)}/>
<Route path="login" component={LoginPage}/>
<Route path="onboarding" component={OnboardingPage}
onEnter={redirect(checkAuth)}/>
</Route>

关于javascript - 根据 React 中的状态重定向用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36273584/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com