javascript - ReactJS 中箭头函数和无箭头函数的区别?

标签 javascript reactjs arrow-functions

我目前很困惑什么时候应该使用箭头函数,什么时候不应该使用。我对此进行了搜索,但仍然不清楚。例如,我创建一个按钮来统计点击次数,代码如下:

 class Counter extends React.Component {
  constructor(props) {
    super(props);
    this.state = {counter: 0};
  }
  buttonPressedIncrease = () => {
    this.setState((prevState) => {
      return {counter: prevState.counter + 1}
    });
  }
  render() { 
    return (
      <div>
        <div>Counter: {this.state.counter}</div>
        <button onClick={this.buttonPressedIncrease}>+</button>
      </div>
    );
  }
}

当我在按钮上使用箭头函数时,如下所示:onClick={() => this.buttonPressedIncrease},该函数不像我在上面的代码中使用的那样工作。

谁能帮我解释一下这个问题吗?箭头函数什么时候起作用,什么时候不起作用?

提前非常感谢。

最佳答案

您已经将 buttonPressedIncrease 定义为“fat-arrow”函数:

buttonPressedIncrease = () => {

这意味着,如果您编写 () => this.buttonPressedIncrease,您将传递一个返回该函数的匿名函数。 onClick 想要一个做某事的函数,而不是返回另一个函数的函数。

由于您在定义函数时使用了粗箭头,因此 this 已经正确绑定(bind),因此您应该只传递函数的名称:

onClick={this.buttonPressedIncrease}
<小时/>

有时在 JSX 中您会看到 onClick={() => someFunction()} (请注意,someFunction() 正在被调用,与您的示例不同),这可能是您感到困惑的根源。这是将正确的 this 保持在范围内的另一种方法,但代价是每次调用 render 方法时都创建一个新函数。因此,首选上述方法。

关于javascript - ReactJS 中箭头函数和无箭头函数的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49256922/

相关文章:

javascript - 如果日期是今天的日期显示 "today"或 "yesterday"

javascript - 检查输入是否以特定字符结尾

javascript - HTML 中的垂直进度条?

javascript - 如何插入元素 react Hook 状态数组

node.js - 无法使用 Nginx 反向代理 React + Node + PM2 获取等

javascript - 如何使用 || 的箭头函数运算符(operator)

javascript - 在 React.js 中,为什么我们不必传递参数事件处理函数?

javascript - 从 JavaScript 中的箭头函数返回数组

javascript - 使用 javascript 创建动态表单

reactjs - 该表达式不可在自定义 Hook 上调用