Функция обратного вызова setState не вызывается? - PullRequest
0 голосов
/ 02 июля 2019

Я новичок в React.Здесь у меня есть флажок, который выбирает все элементы.После этого я вызываю один метод:

handleCheckBox = (event) => {
  if (event.currentTarget.checked) {
    console.log("calling this");
    const updates = {};
    for (const item of [...this.props.untracked.content]) {
      updates[item.resumeId] = "unTracked";
    }
    for (const item of [...this.props.tracked.content]) {
      updates[item.resumeId] = "tracked";
    }
    this.setState(oldState => ({
      selectedValue: {
        ...oldState.selectedValue,
        ...updates,
      }
    }, () => {
      console.log("going in this");
    }));
  } else {
    const reset = {};
    this.setState({
      selectedValue: {
        ...reset
      }
    })
  }
}

Когда я нажимаю на флажок, он выбирает все значения, а также их соответствующие флажки.При этом going in this печатается в консоли.Теперь, если я нажимаю на соответствующий флажок один или два, а затем, если я пытаюсь нажать на флажок, для которого вызывается данный метод, то в этот раз он не вызывается.

Итак, функция вызоваэто время не называютИтак, есть ли причина, по которой он может не звонить?

1 Ответ

1 голос
/ 02 июля 2019
this.setState(oldState => ({
  selectedValue: {
    ...oldState.selectedValue,
    ...updates,
  }
}, () => {
  console.log("going in this");
}));

эквивалентно

this.setState(oldState => () => {
  console.log("going in this");
});

из-за оператора запятой .Вы, вероятно, намеревались передать два аргумента в вызов, например:

this.setState(oldState => ({
  selectedValue: {
    ...oldState.selectedValue,
    ...updates,
  }
}), () => {
  console.log("going in this");
});

Обратите внимание на разницу в расположении скобок.

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