setState回调函数没有被调用?

时间:2019-07-02 06:07:03

标签: javascript reactjs redux

我是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将被打印在控制台中。现在,如果我单击相应的一个或两个复选框,然后尝试单击在其上调用给定方法的复选框,那么该时间不会被调用。

因此,那时没有调用call函数。因此,是否有任何原因可能导致它无法通话?

1 个答案:

答案 0 :(得分:1)

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

等同于

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

因为comma operator。您可能打算将两个参数传递给调用,如下所示:

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

请注意括号的放置方式。