为了账号安全,请及时绑定邮箱和手机立即绑定

react-redux中dispatch是异步?

/ 猿问

react-redux中dispatch是异步?

莫回无 2019-05-19 14:08:19

当我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;

    }

};


查看完整描述

2 回答

?
繁花如伊

https://segmentfault.com/q/10... 眼熟的问题 多用用搜索工具


查看完整回答
反对 回复 2019-05-19
?
噜噜哒

代码的流程如下:

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

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


查看完整回答
反对 回复 2019-05-19

添加回答

回复

举报

0/150
提交
取消
意见反馈 邀请有奖 帮助中心 APP下载
官方微信