React:为什么一定要绑定这个方法?

RN开发

我正在阅读这篇关于 React 中“提升状态”的文章它定义了Calculator组件如下:

class Calculator extends React.Component {
  constructor(props) {
    super(props);
    this.handleChange = this.handleChange.bind(this);
    this.state = {temperature: ''};
  }

  handleChange(e) {
    this.setState({temperature: e.target.value});
  }

  render() {
    const temperature = this.state.temperature;
    return (
      <fieldset>
        <legend>Enter temperature in Celsius:</legend>
        <input
          value={temperature}
          onChange={this.handleChange} />

        <BoilingVerdict
          celsius={parseFloat(temperature)} />

      </fieldset>
    );
  }
}

在行中this.handleChange = this.handleChange.bind(this);,我想知道为什么我们必须绑定this.handleChangethis. 它在行中使用onChange={this.handleChange}即使我们没有进行绑定,这也不会起作用吗?

克里斯

this内部handleChange将提及的方法,而不是组件实例(Calculator)。由于handleChange没有setState方法(组件有),我们必须this在方法中绑定正确的。如果您有另一种没有对 做任何事情的方法this,那么是的,您可以跳过绑定。

来自官方文档:

如果您需要访问处理程序中的父组件,则还需要将函数绑定到组件实例。

规避此问题的一种方法是使用粗箭头语法(如 Dimitar 的回答)或使用React Hook API


换句话说(见评论):

constructor(props) {
  super(props);
  this.state = {temperature: ''};
}

handleChange(e) {
  this.setState({temperature: e.target.value});
  // ^ this = handleChange. You cannot call setState on handleChange.
}


constructor(props) {
  super(props);
  this.handleChange = this.handleChange.bind(this);
  this.state = {temperature: ''};
}

handleChange(e) {
  this.setState({temperature: e.target.value});
  // ^ this = Calculator component. All React (class) Components have setState
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么一定要使用html5?

为什么Android studio 3.0+一定要泄漏super类型的依赖?

C、为什么printf一定要放在循环里面,而不是外面?

为什么一定要“用户”。与os.setxattr设置文件的XATTR时预先计划的名称()?

为什么在冷启动后和锁定时,Linux Mint MATE使用不同的登录屏幕?一定要吗?

React为什么在render中调用我的绑定方法?

为什么这个 ListView 没有绑定 ObservableCollection 元素?

为什么这个 ListView 不会随着绑定属性的变化而改变?

为什么这个崇高的文本键绑定不起作用?

为什么这个表达不统一

为什么这个方法不被覆盖?

为什么这个方法返回0?

为什么这个方法引用赋值编译?

为什么这个方法总是返回 -1

为什么这个方法在另一个方法完成之前运行?

为什么在这个 React 代码的末尾有一个逗号“,”

react-native 为什么我使用这个 useEffect 方法会出现内存泄漏

为什么这个bubbleSort方法不起作用?为什么需要另一个 for 循环?

为什么在这个方法调用中有一个 NullPointerException?

在React中,为什么将render方法绑定到组件实例而不是自定义方法?

为什么绑定类实例方法与绑定类方法不同?

为什么sizeof枚举返回一定值

为什么不能收集一定范围的字符?

为什么我的文本以一定的宽度垂直?

在React中,为什么我必须绑定一个onClick函数而不是调用它?

为什么React会警告我不要将组件方法绑定到对象?

我一定要退订完成观察到的?

我一定要退订完成观察到的?

Observable发出数据时是否一定要完成?