很抱歉,虽然这似乎工作量很小,但我整天都在使用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)}
答案 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”的范围。
在函数中将其设置为外部时,需要直接引用该对象。
“此”不再有效。