React 事件绑定的方式

文章类型:React

发布者:hp

发布时间:2025-03-20

一:引言

在react开发过程中,我们需要绑定事件,有类组件,函数组件,那么他们分别怎么绑定呢?

二:类别

(1)类组件方式

1:在构造函数中手动绑定this

优点:仅需一次绑定,避免每次渲染创建新函数,性能更优

缺点:代码冗余,需在构造函数中显式绑定‌

constructor(props) {
  super(props);
  this.handleClick = this.handleClick.bind(this); // 手动绑定this
}

2:在Render方法中使用bind

优点:语法简单,直观易懂‌

缺点:每次渲染生成新函数实例,可能引发子组件不必要的重新渲染,性能较差‌

<button onClick={this.handleClick.bind(this)}>Click</button>

3:Render方法使用箭头函数

优点:无需手动绑定this,语法简洁

缺点:每次渲染生成新函数实例,可能引发子组件不必要的重新渲染,性能较差‌

<button onClick={() => this.handleClick()}>Click</button>

4:类属性剪头函数

优点:自动绑定this,无需手动绑定,语法简洁且性能最优,(仅绑定一次)

缺点:依赖ES6类属性语法

handleClick = () => { /* 逻辑 */ };

5:在类中使用pulic class fields

class Button extends React.Component {
  handleClick = () => {
    console.log(this);
  }
  render() {
    return <button onClick={this.handleClick}>按钮</button>
  }
}

(2)函数组件方式

1:直接定义事件处理函数

优点:无需处理 this,适合简单场景‌

缺点:每次渲染生成新函数,可能引发性能问题‌

function Button() {
  const handleClick = () => { /* 逻辑 */ };
  return <button onClick={handleClick}>Click</button>;
}

2:结合useCallback优化

优点:通过依赖项缓存函数,减少不必要的重新渲染‌

缺点:需管理依赖项,复杂度较高‌

const handleClick = useCallback(() => { /* 逻辑 */ }, [deps]);

三:总结

1:JSX中的箭头函数=>适用于需要传递额外参数时

2:构造函数中bind=>适用于对性能要求高的场景

3:类中使用箭头函数=>适用与一般场景

4:类中使用pulic class fields=>现代项目推荐使用