【问题标题】:Callback for setState in React inside map()在 map() 中的 React 中回调 setState
【发布时间】:2018-10-08 13:17:19
【问题描述】:

我被困住了。听我说:

如果一个数组让我们说 arr=[{id:100,names:["abc","xyz"]}, {id:101,name:["def","pqr"]}] 在 props 内; 现在我的要求是这样的:

onSave = () => {
  this.state.arr.map(obj => {
    this.setState({ [obj.id]: obj.names }}
  });
  this.accessNumIds();
}

问题是当accessNumIds() 执行时,状态尚未更新。我不能把这个函数放在setStatecallback() 中,因为我希望这个函数只调用一次。

有什么想法吗?

【问题讨论】:

  • setState() 是异步的,所以首先映射/减少并按照@riwu 的建议只调用一次setState()

标签: javascript reactjs ecmascript-6


【解决方案1】:

你可以先做映射:

const state = this.props.arr.reduce((acc, e) => { 
  acc[e.id] = e.names;
  return acc;
}, {});
this.setState(state, () => this.accessNumIds()); 

【讨论】:

    【解决方案2】:

    您根据道具的大小多次设置状态。我建议使用所需的数据(不在 map() 内)执行一次 setState()。如果要在重新渲染后执行 accessNumIds(),请在 componentDidUpdate() 中执行。

    【讨论】:

      猜你喜欢
      • 2020-03-03
      • 2018-11-13
      • 1970-01-01
      • 1970-01-01
      • 2020-05-30
      • 1970-01-01
      • 2017-06-21
      • 2020-11-17
      • 1970-01-01
      相关资源
      最近更新 更多