【问题标题】:Why won't this function work when the same logic works outside of the function? [duplicate]当相同的逻辑在函数之外工作时,为什么这个函数不能工作? [复制]
【发布时间】:2019-12-12 21:14:39
【问题描述】:

抱歉,如果这看起来很费力,但我整天都在谷歌上搜索。我正在尝试使用日期选择器进行选择时更改日期的状态。我可以通过以下方式使用此功能:

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)}

【问题讨论】:

  • onDateChange={this.onDateChange} 可以试试绑定这个onDateChange={this.onDateChange.bind(this)}
  • 因为,onDateChange 不知道 this 变量,所以你要么需要像上面那样绑定它,要么使用一个箭头函数,这是一个 es6 的东西来处理这个上下文
  • @Lunamaxx 您不能将对象方法作为回调传递(在这种情况下通过 React 道具,但它与 React 本身无关)并保留正确的 this 值。如果您打算继续编写 Javascript,您肯定会想要阅读 this 关键字。

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


【解决方案1】:

第一个示例中的箭头(或“胖箭头”)在正确的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

【讨论】:

  • 这个答案是正确的,但请不要重复回答。标记他们关闭。已经有一堆关于 SO 的问题与这个完全一样。
  • @jared-smith 对此感到抱歉。我认为我还没有足够的声誉来标记事物。
  • 好吧,我只是给了你一个加分来帮助你。继续写出这样的高质量答案(最好是在原始问题上),你会很快到达那里。
猜你喜欢
  • 2017-03-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-07
相关资源
最近更新 更多