在Redux中,在这种情况下,我是否必须导入存储才能访问数据?

时间:2017-04-17 06:49:49

标签: reactjs redux store

这是我的容器:

this.setObj(obj)
let activeButton = 0;
anotherObj.options.forEach((option, index) => {
  if (option.id === defaultId) {
    activeButton = index;
    this.setButton(index); //setButton is a common function, so I cannot pass obj as argument to it
  }
});

setObj(obj) {
  this.props.setObj(obj);  //calls an action creator
}

setButton() {
  let {obj} = this.props;
}

我的行动:

setObj = (obj) => ({
    type: 'SET',
    obj
})

我的减速机:

switch(action.type) {
  case 'SET':
    return {...state, id: action.obj}
}

我有mapStateToPropsmapDispatchToProps

现在我发现了一个问题。 如果我在我的容器中调用setObj(),然后再调用setButton(),则obj不会更新。 据丹说,因为它是异步的。 https://github.com/reactjs/react-redux/issues/291

所以在这种情况下,我应该导入商店来访问最新的obj吗?

import store from './store'

    setButton() {
      const state = store.getState()
      let { obj } = state;
    }

1 个答案:

答案 0 :(得分:0)

这是因为javacript的异步性质你应该尝试从componentWillReceiveProps

调用getId函数
componentWillReceiveProps(nextProps) {
   if(nextProps.id !== this.props.id) 
    this.getId(nextProps)
}
getId(props) {
  console.log(props.id)
}

如果你正在使用redux thunk,你也可以在setId上使用.then回调,如

setId(id) {
  this.props.setId(id).then(() => {this.getId()});  //calls an action creator
}