问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

React组件方法中为什么要绑定this

发布网友 发布时间:2022-04-22 19:38

我来回答

2个回答

懂视网 时间:2022-05-12 03:43

我们在react项目开发时,通常会遇到this 绑定的问题。解决的方法总结下分为下面的三种情况:

import React from 'react'export default class Demo extends React.Component{
 constructor(props){ super(props); this.click1.bind(this)//方式1: 在构造函数内绑定
 }
 click1(){
 }
 click2=()=>{//方式2: 使用箭头函数
 }
 click3(){
 }
 render(){ //方式3: 在render内绑定
 return <p>
  <button onClick={this.click2}></button>
  <button onClick={this.click3.bind(this)}></button>
 </p>
 }
}

三种方式都能达到同样的效果,但是性能上还是有很大的差别的。

首先,第三种方式性能是最差的,每次在render的时候都要去绑定this

对于第二种和第三种,我们这样看其实看不出差别,但是如果我们将代码编译为ES5 之后,就能看到其中的区别了:

这里写图片描述

首先,使用箭头函数的方式,该方式其实是定义在this 上的,也就是说,在每一个实例化之后的this 都会定义该方法,但是通过方式1,该方式其实是定义在prototype 上的,各个实例对象共享该方法。所以,单纯从内存空间的消耗上来看,方式1其实是最好的。

但是定义在原型链上的方法,在实际调用该方法的时候,其查找的过程是这样的:
首先检查this 上是否有该方法的定义,如果没有的话,则去prototype 上查找是否有该方法,所以在方法调用的过程中,会经历一次跨原型链的查找。该过程是方法1带来的额外的消耗。

但是箭头函数的方式,在实际调用的时候,访问的是外层作用缓存的_this, 所以在作用域查找上有一层消耗。

经过私底下的测试发现,在原型链上的查找比作用域上的查找,性能会好很多。所以综合来看,还是第二种的方式是最优的。

另外,看老外的代码中,发现过一个批量绑定的方式,其实是对方案一的一种优化,可以简单借鉴一下:
这里写图片描述

这里写图片描述

本文讲解了React this绑定的几点思考,更多相关内容请关注Gxl网。

热心网友 时间:2022-05-12 00:51

为了在方法内能够保持正确的this上下文。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
如何在win10下安装docker? windows(win10)上的docker使用:安装(国内镜像)、操作 win10安装dockerWin10下Docker安装和使用 关于安装配置docker,找不到Hyper-V(win10 家庭版需要配置,专业版不需要... 怎么把微信上的聊天记录转到新手机 怎么把聊天记录转到另一个手机 快递被别人冒领,快递公司有没有责任 洋葱汤洋葱汤 一颗洋葱汤怎么做 一颗洋葱汤怎么做好吃 姜汁松花蛋怎么做? react子组件this.props.xxx返回undefined 姜汁松花蛋的做法 苹果6怎么重设ID密码呢? 金针菇炒牛肉的做法 金针菇炒牛肉怎么做 西红柿和金针菇能一起吃吗 牛肉金针菇汤的做法 羽绒服被洗衣机甩后里面绒毛填充厚薄不均匀,么办列? 羽绒服怎么样清洗才不会越来越薄 羽绒服穿几年不保暖了是什么原因? 羽绒服放机洗厚薄不均了怎么办。 个人的车辆过户给单位需要什么手续?到什么部门办理? 车辆过户要带什么手续,到哪里去办 个人车辆过户到公司需要什么手续 个人车辆想要过户到公司怎么办理都需要带什么手续? 小汽车过户手续如何办理 私家车过户需要怎么办理? 在哪里买车可上个人户?需要什么什么手续 轿车个人过户给个人需要什么手续 oppoa83的录屏在哪? 姜汁松花蛋的做法汁 如何测试react中的this.state 姜汁松花蛋怎么做如何做好吃 React Native中的this,怎么理解 姜汁松花蛋的做法有哪些? react中这几种定义函数的方式,有什么区别 姜汁松花蛋怎么调汁 react 这样的写法怎么使用this.state this.setState? 姜汁皮蛋有什么做法? react 箭头函数 可以把this当参数吗 松花蛋姜汁松花蛋怎么做 姜汁松花蛋的汁怎么调 姜汁松花蛋窍门 怎么解决React中多个组件间的事件传递 React中如何优雅的捕捉事件错误 小米手机突然耗电很快 姜汁松花蛋怎么做? this.refs undefined怎么解决 姜汁松花蛋的做法 松花蛋拌豆腐的做法 proptypes 在react中不能用为什么