Обратный вызов для setState в React внутри карты () - PullRequest
0 голосов
/ 27 апреля 2018

Я застрял. Услышь меня:

если массив позволяет сказать 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 голосов
/ 27 апреля 2018

Вы можете сделать отображение первым:

const state = this.props.arr.reduce((acc, e) => { 
  acc[e.id] = e.names;
  return acc;
}, {});
this.setState(state, () => this.accessNumIds()); 
0 голосов
/ 27 апреля 2018

Вы устанавливаете состояние несколько раз в зависимости от размера реквизита. Я рекомендую делать setState () один раз с нужными данными (не внутри map ()). Если вы хотите выполнить accessNumIds () после повторного рендеринга, сделайте это в componentDidUpdate ().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...