在 React 组件中绑定点击事件通常的做法使用 class 属性。

class Foo extends Component {handleClick = () => {console.log('Click happened')}render() {return <button onClick={this.handleClick}>Click Me</button>;}
}

但是有时候为了更迅速的完成代码逻辑,我们也常常是直接写在 render 方法中。

class Foo extends Component {render() {return <button onClick={() => console.log('Click happened')}>Click Me</button>;}
}

并且使用箭头函数是向回调函数传递参数的最简单的办法。

注意:

在 render 方法中使用箭头函数也会在每次组件渲染时创建一个新的函数,这会破坏 React 基于恒等比较的性能优化。

Diffing 算法当对比两颗树时,React 首先比较两棵树的根节点。当对比两个相同类型的 React 元素时,React 会保留 DOM 节点,仅比对及更新有改变的属性。

如果你在 render 方法里创建函数。因为浅比较 props 的时候总会得到 false。

在大多数情况下,这没什么问题,但如果该回调函数作为 prop 传入子组件时,这些组件可能会进行额外的重新渲染。

import React from 'react';class Child extends React.PureComponent {render () {console.log('导致重新渲染')return (<div>todo</div>)}
}class Foo extends React.Component {state = {count: 0}handleClick = () => {this.setState({count: this.state.count+1})}render() {return (<div><button onClick={this.handleClick}>{this.state.count}</button><Child callbackFn={() => { console.log('在render方法中使用箭头函数') }} /></div>)}
}export default Foo;

PureComponent 的实现原理是通过浅层对比 prop 和 state 的方式来实现的。

如果你在 render 方法里创建函数。因为浅比较 props 的时候总会得到 false。我们通常建议使用 class 属性的语法来避免这类性能问题。

import React from 'react';class Child extends React.PureComponent {render () {console.log('重新渲染')return (<div>todo</div>)}
}class Foo extends React.Component {state = {count: 0}handleClick = () => {this.setState({count: this.state.count+1})}callbackFn = () => {console.log('实例上的方法')}render() {return (<div><button onClick={this.handleClick}>{this.state.count}</button><Child callbackFn={this.callbackFn} /></div>)}
}export default Foo;

这是类组件的做法,可以把方法写在实例中,如果是函数组件的化那就需要使用 useCallback 处理。

在React的render方法中使用箭头函数相关推荐

  1. [react] 请说说你对react的render方法的理解

    [react] 请说说你对react的render方法的理解 render是class组件中必须被重载的方法,组件执行render方法的条件如下: 初始渲染 this.setState方法,参数不能为 ...

  2. Vue中的methods配置项中的箭头函数this指向及相关源码分析

    之前在使用Vue时遇到一个问题,我们知道在Vue的methods中定义函数时,要想使用到Vue实例或者组件实例的this时,我们就不能使用箭头函数定义方法,因为箭头函数中的this是在函数定义时生成的 ...

  3. vue的methods属性的方法中出现回调函数,在回调函数内部获取data中的数据

    在vue中,可能会遇到在methods属性中书写的方法中出现回调函数的情况,如以下代码: data(){return{gemometry: ""} } methods: {draw ...

  4. Vue相关面试问答TOP2(能不能在method中使⽤箭头函数、如何定义组件的data、v-if 和 v-show的区别、computed、watch、methods的区别、axios的特点....)

    1.能不能在method中使⽤箭头函数?               理论上可以使⽤,但是我不会使⽤,因为箭头函数中的this的指向与⼀般函数不同 ⼀般函数执⾏调⽤ 它的对象              ...

  5. Vue中的箭头函数=>目的是用来简化函数的写法的分为三部分:被赋值的变量 传入的参数 返回的数据

    对于多个参数:省略函数体的方法 复杂写法 (参数1, 参数2, -, 参数N) => { 函数声明 }var f = (num1, num2) => { return num1*num2 ...

  6. JavaScript中的箭头函数

    箭头函数 1.用法 //常规的定义 var func1 = function(a,b){...} //箭头函数 var func1 = (a,b) => {...}//常规(函数体中只有一行re ...

  7. laravel控制器方法中,用函数作为变量进行传递时的处理方法

    本人在做上传图片时,里面执行的方法时一致的,只是个别地方不同,这种情况下,就需要把公用的部分提取出来,把不同的地方放到回调函数种去. StudentController中的方法: public fun ...

  8. JS ES6中的箭头函数(Arrow Functions)使用

    转载这篇ES6的箭头函数方便自己查阅. ES6可以使用"箭头"(=>)定义函数,注意是函数,不要使用这种方式定义类(构造器). 一.语法 基础语法 (参数1, 参数2, -, ...

  9. 撤底理解es6中的箭头函数

    本质上 是一个函数,是function 是一个被编译层加工过的函数 用 babel 编译一下箭头函数看看,如下 //es6 const a = ()=>{ console.log(this) } ...

最新文章

  1. Java程序 实验小全
  2. Office 2016 for Mac 15.24已推送至Office Insider慢速更新通道
  3. 全新版本仿网易云音乐来啦
  4. 【大局观很关键】关于找程序的bug
  5. 42.对话框插件——dialog
  6. 记录hive sql报错,return code1和return code2解决方法
  7. Linux7.2虚拟机连接电脑相关配置
  8. IntelliJ IDEA2021.2搭建struts2框架
  9. 把oa系统部署到云服务器,oa系统怎么部署到云服务器
  10. 单片机原理及应用姜志海pdf_单片机原理及应用.pdf
  11. creo数控编程怎么样_creo3.0数控编程加工使用实例视频教程入门到精通 车床编程...
  12. 电脑图标出现蓝色问号解决方法
  13. led灯闪烁代码_如何设置LED灯并使其通过代码闪烁
  14. 胡水生:中小型企业如何应对互联网的发展
  15. XML及XML的解析方式
  16. 【Oracle数据库驱动架包 ojdbc5.jar ojdbc6.jar】
  17. 安卓rom包解包linux,[ROM开发]解包打包ROM详细教程 2017.9.8更新安卓7.0
  18. 金融风控训练营Task1学习笔记
  19. c语言横坐标加一怎么表示,c语言中‘取反加一’是怎么回事啊?
  20. mysql电商产品排序_电商平台商品排序

热门文章

  1. 漫画:应用程序被拖慢?罪魁祸首是 Log4j!
  2. Google Wave 的失败给现代实时协作办公的一个重大教训!
  3. 马化腾、马云并列成为中国首富;百度回应“将上线电商直播”;.NET 5 Preview 2 发布 | 极客头条...
  4. 99%的程序员都在用Lombok,原理竟然这么简单?
  5. 提醒!赶快弃掉这个区块链平台!
  6. @程序员,欠下的技术债怎么还?
  7. TIOBE 6 月编程语言排行榜:Perl 成为 Python 过分炒作的牺牲品?
  8. 将 30 万行代码从 Flow 迁移到 TypeScript 是一种怎样的体验?
  9. 想换行做 5G 的开发者到底该咋办?
  10. GitHub:围剿Python计划!程序员:早知必有一战!你站谁?