react 事件绑定

1.class组件

class组件中 事件绑定 会出现this丢失问题

1.给方法调用bind指向this

2.写成一个匿名箭头函数

3.方法本身写成箭头函数
4.若方法中带参数,只能用bind
复制代码
  class Cc extends React.Component {
    f1(a?: any, b?: any, e?: any) {
      console.log(1)
      console.log(this)
      console.log(a)
      console.log(b)
      // 合成事件对象,原生的在nativeEvent
      console.log(e)
      // 阻止冒泡
      // e.stopPropagation()
      // 阻止捕获
      // e.preventDefault()
    }
    f3 = () => {
      console.log(3)
      console.log(this)
    }
    render() {
      return <div>
        <div>
          1.class组件中 事件绑定 会出现this丢失问题
        </div>
        <div>1.给方法调用bind指向this</div>
        <div>2.写成一个匿名箭头函数</div>
        <div>3.方法本身写成箭头函数</div>
        <div>4.若方法中带参数,只能用bind</div>
        <Button type="primary" onClick={this.f1.bind(this)}>class组件 bind</Button>
        <br />
        <Button type="primary" onClick={() => {
          console.log(2)
          console.log(this)
        }}>class组件 匿名箭头函数</Button>
        <br />
        <Button type="primary" onClick={this.f3}>class组件 方法本身箭头函数</Button>
        <br />
        <Button type="primary" onClick={this.f1.bind(this, 1, 2)}>class组件 bind 带参数</Button>
      </div>
    }
  }
复制代码

 

2.函数组件

函数组件中没有this,不存在this丢失问题
执行方法 带参数
1.用bind
2.借用函数表达式
 
复制代码
function cle(a?: any, b?: any, e?: any) {
    console.log(2)
    console.log(a)
    console.log(b)
    console.log(e)
  }
  let jumpOut = (a?: any, b?: any) => {
    return (event: any) => {
      console.log(event)
      console.log(a)
      console.log(b)
    };

  };
  return (
    <div className={styles.container}>
      <div>函数组件中没有this,不存在this丢失问题</div>
      <div>执行方法 带参数用bind</div>
      <Button type="primary" onClick={() => {
        console.log(1)
      }}>函数组件1 匿名箭头函数</Button>
      <br />
      <Button type="primary" onClick={cle}>函数组件2 调用方法</Button>
      <br />
      <Button type="primary" onClick={cle.bind(this, 1, 2)}>函数组件3 调用方法 带参数</Button>
      <br />
      <Button type="primary" onClick={jumpOut(1, 2)}>函数组件4 函数表达式</Button>
      <br />
      <Cc></Cc>
    </div>
  );
复制代码

 

posted on   sss大辉  阅读(81)  评论(0编辑  收藏  举报

编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

导航

统计

点击右上角即可分享
微信分享提示