首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >React组件中的ES6和ES8语法

React组件中的ES6和ES8语法
EN

Stack Overflow用户
提问于 2016-12-13 11:52:04
回答 2查看 1.4K关注 0票数 0

我是使用React的ES6新手,在组件中看到了这段令人费解的代码:

代码语言:javascript
复制
   componentWillUnmount() {
        base.removeBinding(this.ref);
        this.unsubscribe();
    }

    // ES6 syntax
    handleToggle(event, toggled){
        this.setState({
            [event.target.name]: toggled,
        });
    };

    // possible ES8 syntax
    handleToggle = (event, toggled) => {
        this.setState({
            [event.target.name]: toggled,
        });
    };

第二种方法让我感到困惑,handleToggle方法到底发生了什么?有没有ES5的等价物?

我猜想ES5的等价物是:

代码语言:javascript
复制
   componentWillUnmount: function() {
        base.removeBinding(this.ref);
        this.unsubscribe();
    }

    handleToggle: (event, toggled) => {
        this.setState({
            [event.target.name]: toggled,
        });
    };

这个问题/与第二个方法的混淆部分,是handleToggle方法中的‘...the’将被绑定到错误的值(词法作用域中的' this‘值)...so这个语法在这里是否有效?

怎么一回事?这是我希望理解的其他人的库中的代码。

EN

回答 2

Stack Overflow用户

发布于 2016-12-13 13:32:06

handleToggle方法到底发生了什么?

这是一个名为的的新特性。目前,ES6类语法只为定义共享方法提供语法支持,而不是为实例方法/属性提供语法支持。这个提议扩展了类语法以支持这一点。

下面是一个简单的例子:

代码语言:javascript
复制
class Foo {
  bar = 42;
}

等同于

代码语言:javascript
复制
class Foo {
  constructor() {
    this.bar = 42;
  }
}

也就是说,这些属性的计算方式就像它们被赋值给构造函数中的this一样。

因此,您的示例等同于

代码语言:javascript
复制
class Component extends React.Component {
  constructor()
    this.handleToggle = (event, toggled) => {
        this.setState({
            [event.target.name]: toggled,
        });
    };
  }
}

由于箭头函数的性质,这会创建“绑定的”实例方法,因此可以传递给其他函数,而不会丢失this的值。

,那么这个语法在这里是有效的吗?

没有正式发布的ECMAScript版本包含此功能,因此严格地说,答案应该是:没有。然而,它是在标准轨道上,所以它很可能是ES2018的一部分。

同时,通过将Babel (无论如何都需要用于React )与transform-class-properties plugin一起使用,可以在您自己的代码中使用此建议。

票数 3
EN

Stack Overflow用户

发布于 2016-12-13 12:35:08

这里的handleToggle函数使用箭头函数

代码语言:javascript
复制
handleToggle = (event, toggled) => {
    this.setState({
        [event.target.name]: toggled,
    });
};

它有两个参数event, toggled=>之后的任何参数都是函数体。箭头函数的一个特殊之处在于,它也执行绑定操作。

上述函数的ES5等效项为

代码语言:javascript
复制
handleToggle: function(event, toggled){
    this.setState({
        [event.target.name]: toggled,
    });
};

在调用此函数时,您需要像this.handleToggle.bind(this, value)一样显式绑定它

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41113456

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档