当相同的逻辑在函数外部起作用时,为什么该函数不起作用?

时间:2019-12-12 21:14:39

标签: javascript reactjs datepicker react-datepicker react-dates

很抱歉,虽然这似乎工作量很小,但我整天都在使用Google搜索功能。我正在尝试使用日期选择器进行选择时更改日期的状态。我可以通过以下方法使此功能正常工作:

onDateChange={currentDate => this.setState({currentDate: currentDate})}

但是,如果我尝试将其转换为功能:

onDateChange(currentDate) {
this.setState({currentDate: currentDate});

}

然后将该函数传递给onDateChange:

onDateChange={this.onDateChange}

这将返回“无法设置未定义状态。之所以这样做,是因为我需要onDateChange函数在父组件中执行,然后将该prop传递给该组件。但是我什至无法使该函数正常工作在子组件中。我曾尝试使用箭头功能,但很困惑。有人可以告诉我为什么这不能用作功能吗?

更新:

已解决

onDateChange={this.onDateChange} changed to {this.onDateChange.bind(this)}

2 个答案:

答案 0 :(得分:0)

第一个示例中的箭头(或“胖箭头”)通过正确的this范围。 this的定义符合您的预期,this具有setState方法,因此可以正常工作。

在第二个示例中,this最终没有达到您的期望(即undefined),因此它没有setState方法,并且失败了,从而导致错误报告。

我相信,如果将以下绑定添加到构造函数中,您的第二个示例将得到解决:

class A extends Component {
  constructor(props) {
    ...
    this.onDateChange = this.onDateChange.bind(this);
    ...
  }
}

实例化子组件时,您也许还可以绑定this。就像这样:

   <Child ... onDateChange={this.onDateChange.bind(this)} ... />

来源:https://reactjs.org/docs/faq-functions.html#how-do-i-bind-a-function-to-a-component-instance

答案 1 :(得分:-1)

使用第一个功能设置状态时,将传入“ this”的范围。

在函数中将其设置为外部时,需要直接引用该对象。

“此”不再有效。