Es6 反应箭头函数行为
Es6 React Arrow function behaviour
我正在尝试使用 Borwserify、Watchify、Babelfiy(使用 ES2015 预设)进入 React。
谁能解释一下,为什么这是有效的......
export default class HelloWorld extends React.Component {
constructor(props) {
super(props);
this.state = {
username: 'Tyler McGinnis'
}
this.handleChange = (e) => {
this.setState({username: e.target.value})
};
}
render() {
return (
<div>
Hello {this.state.username} <br />
Change Name: <input type="text" value={this.state.username} onChange={this.handleChange} />
</div>
)
}
而且这段代码不是(构造函数外的箭头函数)...
export default class HelloWorld extends React.Component {
constructor(props) {
super(props);
this.state = {
username: 'Tyler McGinnis'
}
}
handleChange = (e) => {
this.setState({username: e.target.value})
};
render() {
return (
<div>
Hello {this.state.username} <br />
Change Name: <input type="text" value={this.state.username} onChange={this.handleChange} />
</div>
)
}
最后一个给了我一个错误,即:
Unexpected token (18:17)
handleChange = ((e) => {
^
this.setState({username: e.target.value})
} );
我在互联网上能找到的所有内容都告诉我,这两种语法都应该有效,但它们没有。 ES2015 babel 预设设置正确时会发生这种情况(通过编译版本一进行证明而没有问题)。
我错过了什么?为什么我不能在构造函数之外有一个箭头函数(或者可能是类中的任何其他"常规"函数)?
任何帮助将不胜感激!谢谢!
在 ES6/ES2015 中,您不能将箭头函数作为类方法。
将句柄更改定义为常规方法。
handleChange(e){
this.setState({username: e.target.value});
}
绑定句柄在构造函数中与此更改
constructor() {
this.handleChange = this.handleChange.bind(this);
}
这是一个
名为类属性转换的 ES7 阶段 1 功能,您可以安装babel-preset-stage-1
或使用插件transform-class-properties
使其工作。
如果你想使用 ES7 的特性,你需要 babel 插件
转换类属性(箭头函数需要这个)
- 纱线添加 babel-plugin-transform-class-properties --dev
- 纱线添加 babel-plugin-transform-object-rest-spread --dev
然后你配置了像这样的其他东西
.configureBabel(function(babelConfig) {
babelConfig.plugins = ["transform-object-rest-spread","transform-class-properties"]
})
相关文章:
- ES6构造函数返回基类的实例
- ES6是否引入了一种机制来生成块范围的函数语句(而不是表达式)
- 如何在ES6类中使用参数调用函数
- 使用ES6生成器函数中的返回
- ES6类是否与构造函数相同
- 使构造函数参数具有ES6类方法的特权
- ES6 - 构造函数中的超级必需
- ES6类构造函数参数
- 有没有一种优雅的方式来告诉esint,以确保我们're没有使用任何ES6语法/函数
- 从构造函数es6调用静态方法
- 在ES6中将数组析构函数参数的语法
- 具有默认参数值的 ES6 类构造函数上的 NodeJS 错误
- ES6调用扩展组件函数
- 如何使用ES6将两个具有函数的对象合并为一个新对象
- 从ES6中的函数表达式访问类作用域
- es6和谐箭头函数在express处理程序中
- ES6承诺:如何用参数链接函数
- 我可以将参数传递给ES6生成器函数吗
- 在类构造函数 (ES6) 中定义常量
- TypeError: & # 39; MyClass.MyFunction不是函数'ES6 / node4的错误