在map中的React中回调setState()

时间:2018-04-27 16:29:20

标签: javascript reactjs ecmascript-6

我被困住了。听我说:

如果数组允许在道具中说arr=[{id:100,names:["abc","xyz"]}, {id:101,name:["def","pqr"]}]; 现在我的要求是这样的:

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

问题是当accessNumIds()正在执行时,状态尚未更新。我无法将此函数放在callback() setState中,因为我希望此函数只调用一次。

任何想法?

2 个答案:

答案 0 :(得分:3)

您可以先进行映射:

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

答案 1 :(得分:0)

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