事件处理函数的this指向问题以及解决方案以及

1.bind,apply,call----为什么不能用apply、call绑定?

原因是:apply,call指向完之后立即执行当前函数,bind是返回一个新的函数


2.区分普通函数与事件处理函数

1) 普通函数是直接调用的。不存在 this 指向问题,谁调用的,this 指向就是谁,并且没有事件对象

2)事件处理函数其实也是一个函数,只是他绑定在某个事件上,this默认指向undefined(在严格模式下)


3.解决this指向的四种方法

1)直接在事件绑定的地方加上 .bind(this)

注意父组件render,子组件一定会render,所以该又会返回一个全新的函数

2)使用一个箭头函数来作为事件处理函数,然后在这个箭头函数中再以普通方式去调用最终的函数

注意父组件render,子组件一定会render,所以该又会返回一个全新的箭头函数

3)在构造函数(constructor)中提前做 bind ---只初始化一次

4)使用 public class filed 新语法。并将函数写成箭头函数的形式。

性能优化:

1. 父组件render,子组件一定会render

为了节省性能,父组件render的时候,如果子组件没有必要更新。那么不应该让子组件render

如何办呢?

1. 自己使用 shouldComponentUpdate() 生命周期的钩子函数

2. 不要写 shouldComponentUpdate .而是让组件继承 一个 PureComponent 基础组件

了解到这种性能优化之后。

在子组件上传递函数时并且不携带参数时,推荐使用哪几种解决 this 指向问题的方案(即上面的方法3,4)

1. 提供 构造函数中 绑定

2. public class filed 新语法的方式

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。