博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
React与ES6(三)ES6类和方法绑定
阅读量:6350 次
发布时间:2019-06-22

本文共 2083 字,大约阅读时间需要 6 分钟。

React与ES6系列:

如果你看到里CartItemrender方法里的这一句:{this.increaseQty.bind(this)}你可能会很意外为什么要bind

如果把bind删掉的话会怎么样呢?会报错Uncaught TypeError: Cannot read property 'setState' of undeined

这是因为this.increaseQtythis指向的不是类,而是undefined。ES6的类不支持自动绑定,不能像ES5那样。比如React.createClass()这样全部的内部方法都是自动绑定好了。

下面我们就看看ES6写的React组件类如何绑定内部方法。

方法一、使用Function.prototype.bind()

class CartItem extends React.Component {
render() {
return (

); }}

ES6的类本质就是Javascript方法,从Function的prototype里继承了bind()方法。所以当我们调用increaseQty()方法的时候,this指向了类的实例。你可以在。

方法二、使用在constructor里定义的方法

这是方法一和constructor的混合使用:

export default class CartItem extends React.Component {
constructor(props) {
super(props); this.increaseQty = this.increaseQty.bind(this); } render() {
}}

这个方法就是把bind()方法从JSX定义里换到了类的constructor里。

方法三、使用箭头方法和构造函数

ES6的胖箭头方法被调用的时候保留了this指向的上下文。我们可以使用这一特性在构造函数里重新定义increaseQty()方法。

export default class CartItem extends React.Component {
constructor(props) {
super(props); // this.state = {
// qty: props.initialQty, // total: 0 // }; this._increaseQty = () => this.increaseQty(); } render() {
}}

方法四、使用胖箭头方法和ES2015的class property

export default class CartItem extends React.Component {
increaseQty = () => this.increaseQty(); render() {
}

因此,类属性非常的简洁。

注意:类属性不是当前Javascript的标准,但是Babel已经支持这个功能(stage 0)。你可以看了解更多。

方法五、使用ES2015的方法绑定语法

Babel又加入了对一个语法糖的支持Function.prototype.bind()::。这里就不介绍这个操作符是怎么工作的了。

export default class CartItem extends React.Component {
constructor(props) {
super(props); this.increaseQty = ::this.increaseQty; } render() {
}}

最后

老外介绍的几个方法有点地方差别都不大,有的甚至只是调用的地方从constructor换到了JSX里。所以,有些就略去了,其他的可以看看。

欢迎加群互相学习,共同进步。QQ群:iOS: 58099570 | Android: 572064792 | Nodejs:329118122 做人要厚道,转载请注明出处!
本文转自张昺华-sky博客园博客,原文链接:http://www.cnblogs.com/sunshine-anycall/p/5888242.html
,如需转载请自行联系原作者
你可能感兴趣的文章
服务器端解决JS跨域调用问题
查看>>
迁移至个人blog
查看>>
MySql中添加用户,新建数据库,用户授权,删除用户,修改密码
查看>>
雨巷-戴望舒
查看>>
OpenCms创建网站过程图解——献给OpenCms的初学者们
查看>>
C++ 异常处理机制的实现
查看>>
Freebsd的ports命令
查看>>
分布式系统---幂等性设计
查看>>
【转】时钟周期,机器周期,指令周期的区别
查看>>
MYSQL 更新时间自己主动同步与创建时间默认值共存问题
查看>>
android 屏幕适配
查看>>
Android Activity的4种启动模式
查看>>
leetcode第一刷_Minimum Depth of Binary Tree
查看>>
pm2-webshell —— 基于浏览器的终端控制台
查看>>
Mysql基准测试
查看>>
Session 撰改演示
查看>>
【转】python3 发邮件实例(包括:文本、html、图片、附件、SSL、群邮件)
查看>>
事务隔离级别(图文详解)
查看>>
canvas系列教程08-canvas各种坑
查看>>
浅析package.json中的devdependencies 和 dependencies
查看>>