react-redux中dispatch是异步?

当我dispatch的时候,马上打印需要改变的值,发现并没有立刻改变;
代码如下,我查了一些文章但是依旧没有得到想要的答案,希望有大神能给我简单讲解下这是为什么?redux修改不应该是同步执行的吗?

// component.js
import { connect } from 'react-redux';
import action from '../actions/test.js';

class Test extends Component {
      addnum = () => {
          this.props.setaddnum(1);
          console.log(this.props.state.fileMange.addnum); // 0
          // 我很疑惑我点击之后不应该打印出来的是1吗?实际上这个addnum是改变了,但是没有立刻改变
      };
    render () {
        return (
          <Button onClick={this.addnum} type='primary'>click</Button>
            <div>{this.props.state.fileMange.addnum}</div>
        )
    }
}

export default connect(state => ({ state }), action)(Test);

// test.js
export default {
    setaddnum (num) {
        return {
            type: 'SET_ADD_NUM',
            addnum: num
        };
    }
}

// reducers
// 初始化state数据
const initialState = {
    addnum: 0
};
export default (state = initialState, action) => {
    switch (action.type) {
      case 'SET_ADD_NUM':
        return Object.assign({}, state, { addnum: action.addnum });
    default:
        return state;
    }
};
阅读 12k
2 个回答

代码的流程如下:

Test 组件修改 store 后会触发 subscribe 事件,react-redux 会监听到这个事件,然后去 update Test 组件,通过属性的形式,将新的 store 传递进来,这个时候获取的 store 才是最新的。

题主的问题在于,修改之后立即打印 store,这个时候,Test 组件还没有被 update,所以就获取不到最新的 store。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题