在React的render方法中使用箭头函数
在 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方法中使用箭头函数相关推荐
- [react] 请说说你对react的render方法的理解
[react] 请说说你对react的render方法的理解 render是class组件中必须被重载的方法,组件执行render方法的条件如下: 初始渲染 this.setState方法,参数不能为 ...
- Vue中的methods配置项中的箭头函数this指向及相关源码分析
之前在使用Vue时遇到一个问题,我们知道在Vue的methods中定义函数时,要想使用到Vue实例或者组件实例的this时,我们就不能使用箭头函数定义方法,因为箭头函数中的this是在函数定义时生成的 ...
- vue的methods属性的方法中出现回调函数,在回调函数内部获取data中的数据
在vue中,可能会遇到在methods属性中书写的方法中出现回调函数的情况,如以下代码: data(){return{gemometry: ""} } methods: {draw ...
- Vue相关面试问答TOP2(能不能在method中使⽤箭头函数、如何定义组件的data、v-if 和 v-show的区别、computed、watch、methods的区别、axios的特点....)
1.能不能在method中使⽤箭头函数? 理论上可以使⽤,但是我不会使⽤,因为箭头函数中的this的指向与⼀般函数不同 ⼀般函数执⾏调⽤ 它的对象 ...
- Vue中的箭头函数=>目的是用来简化函数的写法的分为三部分:被赋值的变量 传入的参数 返回的数据
对于多个参数:省略函数体的方法 复杂写法 (参数1, 参数2, -, 参数N) => { 函数声明 }var f = (num1, num2) => { return num1*num2 ...
- JavaScript中的箭头函数
箭头函数 1.用法 //常规的定义 var func1 = function(a,b){...} //箭头函数 var func1 = (a,b) => {...}//常规(函数体中只有一行re ...
- laravel控制器方法中,用函数作为变量进行传递时的处理方法
本人在做上传图片时,里面执行的方法时一致的,只是个别地方不同,这种情况下,就需要把公用的部分提取出来,把不同的地方放到回调函数种去. StudentController中的方法: public fun ...
- JS ES6中的箭头函数(Arrow Functions)使用
转载这篇ES6的箭头函数方便自己查阅. ES6可以使用"箭头"(=>)定义函数,注意是函数,不要使用这种方式定义类(构造器). 一.语法 基础语法 (参数1, 参数2, -, ...
- 撤底理解es6中的箭头函数
本质上 是一个函数,是function 是一个被编译层加工过的函数 用 babel 编译一下箭头函数看看,如下 //es6 const a = ()=>{ console.log(this) } ...
最新文章
- Java程序 实验小全
- Office 2016 for Mac 15.24已推送至Office Insider慢速更新通道
- 全新版本仿网易云音乐来啦
- 【大局观很关键】关于找程序的bug
- 42.对话框插件——dialog
- 记录hive sql报错,return code1和return code2解决方法
- Linux7.2虚拟机连接电脑相关配置
- IntelliJ IDEA2021.2搭建struts2框架
- 把oa系统部署到云服务器,oa系统怎么部署到云服务器
- 单片机原理及应用姜志海pdf_单片机原理及应用.pdf
- creo数控编程怎么样_creo3.0数控编程加工使用实例视频教程入门到精通 车床编程...
- 电脑图标出现蓝色问号解决方法
- led灯闪烁代码_如何设置LED灯并使其通过代码闪烁
- 胡水生:中小型企业如何应对互联网的发展
- XML及XML的解析方式
- 【Oracle数据库驱动架包 ojdbc5.jar ojdbc6.jar】
- 安卓rom包解包linux,[ROM开发]解包打包ROM详细教程 2017.9.8更新安卓7.0
- 金融风控训练营Task1学习笔记
- c语言横坐标加一怎么表示,c语言中‘取反加一’是怎么回事啊?
- mysql电商产品排序_电商平台商品排序
热门文章
- 漫画:应用程序被拖慢?罪魁祸首是 Log4j!
- Google Wave 的失败给现代实时协作办公的一个重大教训!
- 马化腾、马云并列成为中国首富;百度回应“将上线电商直播”;.NET 5 Preview 2 发布 | 极客头条...
- 99%的程序员都在用Lombok,原理竟然这么简单?
- 提醒!赶快弃掉这个区块链平台!
- @程序员,欠下的技术债怎么还?
- TIOBE 6 月编程语言排行榜:Perl 成为 Python 过分炒作的牺牲品?
- 将 30 万行代码从 Flow 迁移到 TypeScript 是一种怎样的体验?
- 想换行做 5G 的开发者到底该咋办?
- GitHub:围剿Python计划!程序员:早知必有一战!你站谁?