我有一个减速器,看起来像这样:
export default function reducer(state={
fetching: false,
}, action) {
switch (action.type) {
case 'LOGIN_REQUEST': {
return {...state, fetching: true}
}
...
return state
我从组件向它发送操作,在组件中我有:
const mapStateToProps = (state) => {
return state
}
我的问题是:
1。在mapStateToProps
状态中包含login.fetching: true
2。在向减速器调度动作后的组件中,this.props.login.fetching
包含false
3.在组件render()
中,方法this.props.login.fetching
为true
。
为什么在2的情况下。它仍然是false
,有可能吗?我在这里缺少什么?
行动调度:
onLoginPress = () => {
this.props.dispatch(loginUser(this.state.email.trim(), this.state.password.trim()))
console.log(this.props);
答案非常简单,因为Javascript的async nature
,在dispatch
操作之后立即获得false
,因此即使在修改props
之前,也会调用console.log(this.props)
,因此它会显示以前的值。但是,当您从reducer更改状态时,会调用render()
函数,因此它会显示更新后的值。
你需要的是调度上的Promise
使用此
onLoginPress = () => {
this.props.dispatch(loginUser(this.state.email.trim(), this.state.password.trim())).then(() => {
console.log(this.props);
})
我希望,我能够恰当地解释它。