好程序员分享React-010-事件处理函数的this指向问题-创新互联

好程序员分享React-010-事件处理函数的this指向问题,区分普通函数与事件处理函数

成都创新互联坚持“要么做到,要么别承诺”的工作理念,服务领域包括:成都网站建设、成都网站制作、企业官网、英文网站、手机端网站、网站推广等服务,满足客户于互联网时代的霸州网站设计、移动媒体设计的需求,帮助企业找到有效的互联网解决方案。努力成为您成熟可靠的网络建设合作伙伴!

1、普通函数是直接调用的。不存在 this 指向问题,谁调用的,this 指向就是谁。

2、普通函数没有事件对象 event

3、事件处理函数其实也是一个函数,只是他绑定在某个事件上。

4、事件处理函数的 this 默认指向 undefined

解决this指向问题的4种办法

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

<button onClick={this.handleClick.bind(this)}>点我</button>

2、使用箭头函数

<button

onClick={event => {

this.handleClick(event);

}}

>

点我

</button>

3、在构造函数中统一进行this指向的绑定

constructor() {

super();

this.handleClick = this.handleClick.bind(this);

}

render() {

return (

<button onClick={this.handleClick}>点我</button>

)

}

4、使用实验性质的 public class fileds 语法。要去使用的话,的需要babel插件的支持.

1、安装 @babel/plugin-proposal-class-properties babel 插件

2、去 babel 的配置文件中,配置好

3、从新启动项目

class App extends React.Component {

handleClick = () => {

console.log(this);

};

}

为啥要使用 bind 来修改this指向,而不能使用 apply、call?

因为 apply 与 call 他们会直接执行函数,而 bind 会返回一个新的函数。

在调用子组件的时候,需要传递一个方法下去,这时这个方法的this绑定推荐使用哪几种:

推荐使用:在构造函数中的bind 与 public class fileds 语法。

1、首先要知道的是,父组件render,子组件一定会render

2、我们希望如果子组件没有发生变化,那么在 父组件render的时候,让子组件不做render。节省性能。

3、要实现第2点,可以让子组件继承的是 PureComponent

4、PureComponent 。它会帮助我们计算子组件接收到的porps 有没有发生变化,如果有那么就 render .如果没有就阻止render

<Child onFn1={this.handleFn1.bind(this)}  />

// 由于 .bind() 方法每次都会返回一个新的函数,所以这种方式不推荐。。。。

<Child onFn1={() => { this.handleFn1() }}  />

// 由于 每次执行到这行代码,箭头返回都是一个新的箭头函数,所以这种方式不推荐

constructor() {

super();

this.handleFn1 = this.handleFn1.bind(this)

}

<Child onFn1={this.handleFn1}  />

// 由于 constructor 构造函数只会执行一次,后续执行到 Child 的代码,传递过去的 onFn1 没有发生变化

// 所以这种方式推荐

<Child onFn1={this.handleFn1}  />

handleFn1 = () => {

...

}

// 这种方式同样也推荐。

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。

当前名称:好程序员分享React-010-事件处理函数的this指向问题-创新互联
URL地址:https://www.cdcxhl.com/article18/cshcgp.html

成都网站建设公司_创新互联,为您提供网站营销ChatGPT网站改版企业建站云服务器外贸建站

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联

成都定制网站建设