reactjs - 为什么箭头函数可以工作但常规函数不能 React JS

这是我的代码:

import React from 'react';

export default class MovieCard extends React.Component {
  constructor(props) {
    super(props);
    this.state = { content: 'test' };
  }

  changer = () => {
    this.setState({ content: 'changed' });
  };

  //   changer() {
  //     this.setState({ content: 'changed' });
  //   }
  render() {
    return (
      <div>
        <h1>{this.state.content}</h1>
        <button onClick={this.changer}>click me to change</button>
      </div>
    );
  }
}

常规函数(我把它注释掉了)应该做同样的事情但它不起作用,而箭头函数起作用并改变 h1 元素的状态。

这是为什么呢?有什么问题吗?

最佳答案

如果您要使用它们,您需要绑定(bind)this。箭头函数不需要绑定(bind),因为箭头函数在其上下文中没有以下内容:

  • 这个

  • 争论

  • super 好

  • 新目标

    constructor(props) {
      super(props);
      this.state = { content: "test" };
      this.changer = this.changer.bind(this);
    }
    
    changer() {
      this.setState({ content: "changed" });
    }
    render() {
      return (
        <div>
          <h1>{this.state.content}</h1>
          <button onClick={this.changer}>click me to change</button>
        </div>
      );
    }
    

https://stackoverflow.com/questions/70641175/

相关文章:

javascript - 如何将模型查看器加载器的颜色设置为红色

csv - 如何使用 bash 中的 awk 删除具有相似数据的行以仅保留特定列(tsv 文件)中的

html - 使用圆形元素的饼图

c++ - 如何检查两个数组或列表是否相同?

reactjs - 导航差异(React Router v6)

java - 为什么 Minecraft Forge 有这些奇怪的变量名?

python - 跟踪其所有事件实例化数据的类?

r - 如何根据特定行的比较来消除变量

go - 我应该如何使用 protoc-gen-go-grpc?

c++ - 如何保证使用编译时常量初始化堆栈变量