【发布时间】:2016-04-28 04:48:18
【问题描述】:
我在使用 redux 和 react 路由器进行身份验证时遇到了一些问题,希望能澄清一下如何最好地解决我的问题。
我有一个登录组件,在提交时会调度以下操作:
export const loginUser = (creds) => {
return dispatch => {
dispatch(requestLogin(creds))
return fetch('http://127.0.0.1:4000/api/login', {
...
})
.then(res => {
dispatch(receiveLogin())
browserHistory.push('/admin')
...
})
...
}
}
receiveLogin 操作将状态中的 isAuthenticated 标志更新为 true。我的受保护路线具有以下 onEnter 钩子:
export default (state) => {
return {
path: '/',
component: App,
childRoutes: [
{
path: 'protected',
component: Protected,
...
onEnter(nextState, replaceState) {
const loggedIn = //check state.isAuthenticated
if (!loggedIn) {
replaceState(null, 'login')
}
}
}
]
}
}
如您所见,我将状态作为参数传入。这使我可以从服务器以及客户端访问初始状态。但是,在我的登录操作发生后,显然 onEnter 挂钩仍将使用初始状态。
我想知道的是在更新 isAuthenticated 标志后获取当前状态并在我的 onEnter 挂钩中使用它的最佳方法。或者,我的方法是否完全有缺陷,我应该完全采用不同的方式吗?
【问题讨论】:
标签: reactjs react-router redux