函数参数从何而来?

时间:2019-03-26 12:19:19

标签: javascript reactjs

我正在使用以下代码:

  handleOwnerMode = ownerChecked  => {
     this.setState(prev => ({ ownerChecked, showOwner: !prev.showOwner}))
     // this.setState(prev => ({ ownerChecked: !prev.ownerChecked, showOwner: !prev.showOwner }))
  }

渲染内部是

<Switch onChange={this.handleOwnerMode} checked={this.state.ownerChecked} />

OnChange,我能以某种方式收到关于ownerChecked的更改。为什么会这样呢?我没有写onChange = {this.handleOwnerMode(event.value)}或类似的东西...

此外,对于setState。我通常只使用this.setState({state:newState}),但是现在我可以使用this.setState(prev => {})以某种方式传递以前的状态。是否有定义的重载可以让我做到这一点?

谢谢。

2 个答案:

答案 0 :(得分:3)

  

OnChange,我以某种方式能够收到有关更改的信息   ownerChecked。为什么会这样呢?我没写   onChange = {this.handleOwnerMode(event.value)}或类似的东西...

在两种情况下,您都已将一个函数(回调)传递给“接收者”。第一次使用Switch组件,第二次使用React。他们每个人都可以使用所需的任何参数来调用您的函数/回调。这是通常使用回调的方式。

  

是否在某个地方定义了重载,让我可以这样做?

是的,setState可能会检查您是否向其传递了一个函数并且其行为有所不同:例如给您以前的状态并调用您的函数。如果将对象传递给它,则不会这样做。

答案 1 :(得分:1)

反应事件是合成事件,因此即使yo不传递任何事件参数,函数也会接受它。看看这些。 More information 1More information 2