在页面加载期间多次调用 React onChange 处理程序

Pen*_*nny 7 html state jsx reactjs

我们正在尝试向onChange我们的自定义组件之一添加处理程序 - 即Checkbox组件(它是自定义组件的唯一原因是我们可以有效地封装intermediateHTML 属性)。它看起来像这样:

<Checkbox
  id="select-all"
  onChange={this.handleSelectAllChange(ids)}
  indeterminate={isIndeterminate}
  checked={areVisibleItemsSelected}
  disabled={isDisabled}
/>
Run Code Online (Sandbox Code Playgroud)

处理函数的结构有点像这样:

handleSelectAllChange(ids) {
  // omitted code that filters on ids and produces newIds

  this.props.updateIds(newIds);
}
Run Code Online (Sandbox Code Playgroud)

哪里this.props.updateIds是修改父组件状态的传递函数。

问题是这个函数在页面加载期间被调用了大约 10 次,这不是故意的。我以为只有在修改实际复选框元素时才调用它?

Mur*_*göz 6

通过这样声明,onChange={this.handleSelectAllChange(ids)}方法调用会在渲染CheckBox. 使用 ES6,您可以通过使用来避免这种情况

onChange={() => this.handleSelectAllChange(ids)}

这意味着您传递了一个将调用handleSelectAllChange更改的新函数。