如何在循环中获得最新的redux值



我刚刚通过下面的方案,对此感到很奇怪。

基本上,在我的组件中,我将使用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只是返回还原器设置的最新状态,或者是您的数据设置,因此还原器名称是数据对象属性名称?

相关内容

  • 没有找到相关文章

最新更新