根据React中的状态重定向用户
Redirecting user based on state in React
现在,我的路由器看起来是这样的:
<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
重定向到/login
;如果用户未完成登录流程(选择用户名等),则OnboardedPage
重定向到/onboarding
。然而,我认为未来可能需要更多这样的有条件重定向。处理这些条件重定向的最佳方法是什么?有可能有一个单独的组件来处理所有重定向吗?
<Route>
s接受在路由匹配时调用的onEnter
钩子。钩子看起来像这样:
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>
您可以有一个函数来检查用户是否登录,然后导入:
import {browserLocation} from './browser-location'
export default function checkLoggedIn() {
if (localStorage.jwt === null)
browserLocation.pushState('/login')
}
相关文章:
- 如何使用Ajax调用特定的控制器和操作来重定向用户
- 意思是.js - 登录后重定向用户 - 在本地工作,但在部署时不起作用
- 当用户在选择框中选择选项时,使用window.location.href重定向用户只会更改导航器中URL的最后一位
- 如何从特定国家/地区重定向用户
- 注销后如何重定向用户
- 如何在不重定向用户的情况下更改地址栏URL(不使用历史API?)
- 试图在表单post之后使用jQuery.post()重定向用户
- 根据React中的状态重定向用户
- 如何根据 html 中的选项/选择重定向用户(单击按钮后)
- 如果 cookie 为空 jquery,则设置和重定向用户
- 如果用户在发布之前没有设置密码,请重定向用户
- 使用 Javascript 根据设备重定向用户
- 如何删除未定义的对象错误并根据位置重定向用户
- 如何使用 PHP 而不是 JS 重定向用户
- 根据时区重定向用户
- 在 iframe 源更改后重定向用户
- Ionic (AngularJS) - 重定向用户和路由
- 成功提交表单后重定向用户
- 未重定向用户的控制器操作是从AJAX调用的
- 超链接没有't使用jQuery重定向用户