Javascript 为什么赢了';当相同的逻辑在函数外部工作时,该函数是否工作?

Javascript 为什么赢了';当相同的逻辑在函数外部工作时,该函数是否工作?,javascript,reactjs,datepicker,react-datepicker,react-dates,Javascript,Reactjs,Datepicker,React Datepicker,React Dates,如果这看起来不够努力,我很抱歉,但我已经花了一整天的时间在谷歌上搜索了。当使用日期选择器进行选择时,我试图更改日期的状态。我可以通过执行以下操作来实现此功能: onDateChange={currentDate => this.setState({currentDate: currentDate})} 但如果我想把它变成一个函数: onDateChange(currentDate) { this.setState({currentDate: currentDate}); } 然后将该函

如果这看起来不够努力,我很抱歉,但我已经花了一整天的时间在谷歌上搜索了。当使用日期选择器进行选择时,我试图更改日期的状态。我可以通过执行以下操作来实现此功能:

onDateChange={currentDate => this.setState({currentDate: currentDate})}
但如果我想把它变成一个函数:

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

然后将该函数传递给onDateChange:

onDateChange={this.onDateChange}
这是回报“无法设置未定义的状态。我这样做的原因是因为我需要在父组件中执行onDateChange函数,然后将该支持传递给该组件。但是我甚至不能让这个函数在子组件中工作。我尝试过使用箭头函数,但我被难倒了。有人能告诉我为什么这个函数不起作用吗

更新:

解决

onDateChange={this.onDateChange} changed to {this.onDateChange.bind(this)}
第一个示例中的箭头(或“胖箭头”)进入适当的
范围。
this
的定义与您期望的一样,并且
this
有一个
setState
方法,因此它可以工作

在第二个示例中,
最终不是您所期望的(即,
未定义的
),因此它没有
设置状态
方法,因此失败,导致您报告的错误

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

class A extends Component {
  constructor(props) {
    ...
    this.onDateChange = this.onDateChange.bind(this);
    ...
  }
}
在实例化子组件时,您还可以绑定此
。这大概是:

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


来源:

onDateChange={this.onDateChange}
你能试着绑定这个
onDateChange={this.onDateChange.bind(this)}
吗,因为,
onDateChange
不知道这个
变量,所以你要么像上面那样绑定它,要么使用一个arrow函数,这是一个es6的东西,可以解决这个问题context@Lunamaxx您不能将对象方法作为回调传递(在本例中是通过React props传递的,但它与React本身无关)并保留正确的
this
值。如果你打算继续写Javascript,你肯定会想仔细阅读
这个
关键字。这个答案是正确的,但请不要重复回答。标记它们以便关闭。上面已经有一大堆问题了,所以都和这个问题一模一样。@jared smith对此表示抱歉。我认为我还没有足够的声誉来标记事情。好吧,我只是给了你一个加号来帮助你。继续这样写高质量的答案(最好是原始问题的OBV),你会很快得到答案。