这是我的容器:
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}
}
我有mapStateToProps
和mapDispatchToProps
。
现在我发现了一个问题。
如果我在我的容器中调用setObj()
,然后再调用setButton()
,则obj
不会更新。
据丹说,因为它是异步的。
https://github.com/reactjs/react-redux/issues/291
所以在这种情况下,我应该导入商店来访问最新的obj
吗?
import store from './store'
setButton() {
const state = store.getState()
let { obj } = state;
}
答案 0 :(得分:0)
这是因为javacript的异步性质你应该尝试从componentWillReceiveProps
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
}