最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

React组件中绑定this的原因分析

来源:动视网 责编:小采 时间:2020-11-27 19:33:22
文档

React组件中绑定this的原因分析

React组件中绑定this的原因分析:本篇文章给大家分享的是关于React组件方法中为什么要绑定this,内容很不错,有需要的朋友可以参考一下,希望可以帮助到大家。如果你尝试使用过React进行前端开发,一定见过下面这样的代码://假想定义一个ToggleButton开关组件 class ToggleBu
推荐度:
导读React组件中绑定this的原因分析:本篇文章给大家分享的是关于React组件方法中为什么要绑定this,内容很不错,有需要的朋友可以参考一下,希望可以帮助到大家。如果你尝试使用过React进行前端开发,一定见过下面这样的代码://假想定义一个ToggleButton开关组件 class ToggleBu


4. 如果不绑定this

如果类定义中没有绑定this的指向,当用户的点击动作触发this.handleClick( )这个方法时,实际上执行的是原型方法,可这样看起来并没有什么影响,如果当前组件的构造器中初始化了state这个属性,那么原型方法执行时,this.state会直接获取实例的state属性,如果构造其中没有初始化state这个属性(比如React中的UI组件),说明组件没有自身状态,此时即使调用原型方法似乎也没什么影响。

事实上的确是这样,这里的bind(this)所希望提前规避的,就是著名的this指针丢失的问题。

例如使用解构赋值的方式获取某个属性方法时,就会造成引用转换丢失this的问题:

const toggleButton = new ToggleButton();

import {handleClick} = toggleButton;

上例中解构赋值获取到的handleClick这个方法在执行时就会报错,Class的内部是强制运行在严格模式下的,此处的this在赋值中丢失了原有的指向,在运行时指向了undefined,而undefined是没有属性的。

另一个存在的,是没有绑定this的响应函数在异步运行时可能会出问题,当它作为回调函数被传入一个异步执行的方法时,同样会因为丢失了this的指向而引发错误。

如果没有强制指定组件实例方法的this,在将来的使用中就无法安心使用引用转换或作为回调函数传递这样的方式,对于后续使用和协作开发而言都是不方便的。

5. 小结

this的使用非常灵活,但这种灵活性也带来了很多混乱。这里的bind(this)是为了改进javascript语言级的缺陷,并不是只有React中才需要这样做,这个问题是伴随着面向对象编程而产生的,在使用javascript进行插件和框架的开发时,这个问题的影响会更加明显。之所以说它是一个语言级的缺陷,是因为Java中对于this在同样场景下的指向更符合正常思维逻辑,而javascript中如果不显示绑定,就会出现语言运行结果和方法的命名表意不一致的情况。

文档

React组件中绑定this的原因分析

React组件中绑定this的原因分析:本篇文章给大家分享的是关于React组件方法中为什么要绑定this,内容很不错,有需要的朋友可以参考一下,希望可以帮助到大家。如果你尝试使用过React进行前端开发,一定见过下面这样的代码://假想定义一个ToggleButton开关组件 class ToggleBu
推荐度:
标签: 绑定 的原因 分析
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top