我刚刚通过下面的方案,对此感到很奇怪。
基本上,在我的组件中,我将使用Redux Store中的inputList
,通过循环,更新其中的某些字段。伪码如下
//Before onClick, this.props.inputList as below:
[
{ id: 1, active: 1, name: 'john' },
{ id: 2, active: 1, name: 'cena' },
{ id: 3, active: 2, name: 'oldValue' },
]
onClick = () => {
this.props.inputList
.filter(x => x.active === 2)
.forEach(x => {
//Update name to 'newValue' and submit to backend
this.props.reduxAction_updateField({ fieldName: 'name', value: 'newValue'});
//********
console.log(x) //x.name remained 'oldValue' which make sense.
//Try to use Store.getState().myReducer.inputList
const expectUpdatedElement = Store.getState().myReducer.inputList
.find(y => y.id === 3);
//expectUpdatedElement.name === 'oldValue'?????
//********
//Make API Request with updated info
...
})
}
如上所示,我使用了forEach
循环,并使用Redux Action将字段name
更新为newValue
。
在循环中,我使用Store.getState().myReducer.inputList
,而不是this.props.inputList
,以为会获得更新的列表,但似乎不像是情况?
从此:
订户旨在响应状态价值本身,而不是 行动。对国家的更新是同步处理的,但是 可以批处理或拒绝订户的通知,这意味着 订户并不总是通知每个动作。这是一个 共同的性能优化以避免重复重新渲染。
问题是,您的组件是订户,一旦您尝试更新状态,就无法保证您在派遣操作后立即获得最新状态。
您应该做的是,使您要在州内存储的内容,与该变量进行API调用,然后同时更新商店。
const values = [
{ id: 1, active: 1, name: 'john' },
{ id: 2, active: 1, name: 'cena' },
{ id: 3, active: 2, name: 'oldValue' },
]
onClick = () => {
this.props.inputList
.filter(x => x.active === 2)
.forEach(x => {
//Update name to 'newValue' and submit to backend
//get updatedInfo in a variable
const updatedInfo = values.find(y => y.name === x.name);
//make redux redux to update the value
this.props.reduxAction_updateValue({ value: updatedInfo});
//Make API Request with updatedInfo variable
...
})
}
如果没有适当的代码样本,很难知道问题是什么(而且我无法评论我是新手)。但是,假设您已经正确设置了商店,则可能是因为您期望从GetState获得还原器,但GetState只是返回还原器设置的最新状态,或者是您的数据设置,因此还原器名称是数据对象属性名称?