当前位置: 首页 > news >正文

react 代码优化(一) ——事件处理

React的事件处理

1、React 的事件绑定属性的命名要采用驼峰时写法, 不能小写

2、要传入一个函数作为事件处理函数,不能是字符串

例如:<button onclick={handleMe}>click me!</button>

3、阻止默认行为preventDefault

function ActionLink() {
  function handleClick(e) {
    e.preventDefault();  //阻止默认行为
    console.log('The link was clicked.');
  }

  return (
    <a href="#" onClick={handleClick}>
      Click me
    </a>
  );
}    

4、事件绑定

1、在构造函数中使用bind绑定this
class Introduce extends React.Component {
    constructor (props) {
        super(props);
        this.handleClick = this.handleClick.bind(this)
    }
    
    handleClick() {
        console.log('hello')
    }
    
    render() {
        return (
            <div onClick={this.handleClick}>click me!</div>
        )
    }
}

优点:这种绑定方式 是官方推荐的,在类构造函数中绑定this, 只会生成一个方法实例, 并且绑定一次之后如果多次用到这个方法,也不需要再绑定
缺点:即使不用到state,也需要添加类构造函数来绑定this,代码量多一点
2、使用属性初始化器语法绑定this(实验性)
class Introduce extends React.Component {
    handleClick = () => {
        console.log('hello')
    }
    render() {
        return (
            <div onClick={this.handleClick}>click me!</div>
        )
    }
}
这种属性初始化语法,将方法初始化为箭头函数,因此在创建函数的时候就绑定了this,无需再次绑定,这种需要结合babel转义,很方便
3、在调用的时候使用bind绑定this
class Introduce extends React.Component {
    handleClick() {
        console.log('hello')
    }
    render() {
        return (
            <div onClick={this.handleClick.bind(this)}>click me!</div>
        )
    }
}
4、在调用的时候使用箭头函数绑定this
class Introduce extends React.Component {
    handleClick() {
        console.log('hello')
    }
    render() {
        return (
            <div onClick={() => this.handleClick()}>click me!</div>
        )
    }
}
3、4这种方式会有性能影响并且如果回调函数作为属性传给子组件的时候会导致重新渲染的问题 
综上,方式一是官方推荐的,方式二是我们用起来比较好用的 也结合了 方式1、3、4的优点


相关文章:

  • 《C++ Primer Plus》读书笔记之十二—C++中的代码重用
  • thinkphp @代表什么
  • js cookie可选参数(document.cookie='name=张三;expires='+day;)
  • 人人都可能是网红,看网红的几种变现模式
  • java中的泛型
  • AI和量子计算的“联姻”开启新世界
  • zookeeper - 多线程分析(10)
  • Android 8.0 功能和 API
  • 1000个中国“富一代”今日来杭州,要搞什么大事?
  • Zabbix监控指定端口
  • 网卡绑定技术teaming!
  • Date8
  • Promise初体验
  • PHP 使用GD库生成二维码 实现圆角
  • session一致性架构设计
  • 【面试系列】之二:关于js原型
  • 【跃迁之路】【733天】程序员高效学习方法论探索系列(实验阶段490-2019.2.23)...
  • 08.Android之View事件问题
  • JavaScript标准库系列——Math对象和Date对象(二)
  • orm2 中文文档 3.1 模型属性
  • PAT A1120
  • use Google search engine
  • 得到一个数组中任意X个元素的所有组合 即C(n,m)
  • 好的网址,关于.net 4.0 ,vs 2010
  • 前端面试之闭包
  • 嵌入式文件系统
  • 如何邀请好友注册您的网站(模拟百度网盘)
  • 项目管理碎碎念系列之一:干系人管理
  • 中国人寿如何基于容器搭建金融PaaS云平台
  • 如何用纯 CSS 创作一个货车 loader
  • ${factoryList }后面有空格不影响
  • (html转换)StringEscapeUtils类的转义与反转义方法
  • (LNMP) How To Install Linux, nginx, MySQL, PHP
  • (Matalb回归预测)PSO-BP粒子群算法优化BP神经网络的多维回归预测
  • (超简单)构建高可用网络应用:使用Nginx进行负载均衡与健康检查
  • (附源码)ssm跨平台教学系统 毕业设计 280843
  • (官网安装) 基于CentOS 7安装MangoDB和MangoDB Shell
  • (力扣题库)跳跃游戏II(c++)
  • (十一)c52学习之旅-动态数码管
  • (一)eclipse Dynamic web project 工程目录以及文件路径问题
  • (转) 深度模型优化性能 调参
  • (转)setTimeout 和 setInterval 的区别
  • ... 是什么 ?... 有什么用处?
  • .NET : 在VS2008中计算代码度量值
  • .NET 使用 ILRepack 合并多个程序集(替代 ILMerge),避免引入额外的依赖
  • .NET 中 GetHashCode 的哈希值有多大概率会相同(哈希碰撞)
  • .net对接阿里云CSB服务
  • []新浪博客如何插入代码(其他博客应该也可以)
  • [android] 手机卫士黑名单功能(ListView优化)
  • [Angular 基础] - 自定义指令,深入学习 directive
  • [C++]Leetcode17电话号码的字母组合
  • [emacs] CUA的矩形块操作很给力啊
  • [Git].gitignore失效的原因
  • [JavaWeb]—Spring入门
  • [Jquery] 实现温度计动画效果