【发布时间】:2017-06-22 15:41:41
【问题描述】:
我是react 和redux 的新手,一直在探索它与angular 的不同之处。
我正在尝试做一个简单的登录页面,但无法实现我想要的。从登录表单中获取用户名和密码后,我将其提交如下:
submitHandler(e){
e.preventDefault();
var user = {
name : this.state.username,
password: this.state.password
}
this.props.authenticateUser(user);
browserHistory.push('/home');
this.setState({
username:'',
password:''
})
}
这里,authenticateUser 是我的 reducer(如下所示)中的一个函数,它从已经存在的用户列表中检查,然后是带有属性 isAuthenticated 的状态:
case 'AUTHENTICATE_USER':
var users = state.userslist;
var payloadUser = action.payload;
for (let i = 0; i < users.length; i++) {
let user = users[i]
if (user.name === payloadUser.name) {
return {...state, isAuthenticated: true };
}
};
return {...state, isAuthenticated: false };
现在在 Angular 中,我将等待此调用完成并检查此值是 true 还是 false,然后使用 angular-router 导航到主页。
但是我如何在react 中实现同样的效果。我在示例应用程序中使用react-router。
我试图在我调用this.props.authenticateUser(user) 的submitHandler 函数下方检查isAuthenticated,但问题是,this.props.isAuthenticateUser 未更新并返回false,我已将其设置为@987654340 @ 在我的减速器中。
请告诉我在调用authenticateUser 函数后如何检查isAuthenticated,以便我可以继续我的主页路由。我是否必须使用promise 并等待redux 更新状态然后再次检查? (我知道 react 是一种单向路径,但它不会那样工作。)
此外,如果我的身份验证失败,如何在我的登录表单下方显示一个错误面板。我认为为错误面板使用一个组件,该组件以isAuthenticated 作为输入并检查是否为 false 以显示 (即 ngShow 就像在 Angular 中一样。) 但恐怕这行不通同样,因为我的状态不会及时更新。
我知道渲染函数会在状态发生任何变化时被调用。但我就是无法清楚地了解 React。
编辑:为简洁起见,我没有提供上面的动作创建者和完整的减速器,而只显示了身份验证用户的 switch case 操作。我的应用程序遵循原始的 redux 架构,包括操作、reducers、容器、组件等。
编辑: Github 链接here
【问题讨论】:
-
github.com/V1cHu/react-redux 这个网址转到 404 页面。你能分享正确的网址吗
标签: reactjs redux react-router react-redux