我已经启动了一个项目,我在后端使用React JS作为后端节点js。我用webpack捆绑了JS文件。我使用了babel和其他必要的东西。当我在react类中使用箭头函数时,它会产生语法错误。像模块构建失败:SyntaxError:意外的令牌。但我可以在节点中使用箭头功能,没有任何问题。
这是我的webpack配置文件
import path from 'path';
import webpack from 'webpack';
import 'react-hot-loader/patch';
export default{
devtool: 'eval',
entry:[
'react-hot-loader/patch',
'webpack-hot-middleware/client?reload=true',
path.join(__dirname,'client/index.js')],
output:{
path:'/',
publicPath:'/'
},
plugins:[
new webpack.NoErrorsPlugin(),
new webpack.optimize.OccurenceOrderPlugin(),
new webpack.HotModuleReplacementPlugin()
],
module:{
loaders:[
{
test:/\.js$/,
include:path.join(__dirname,'client'),
loaders: ['react-hot-loader/webpack', 'babel']
},
{
test: /\.jpe?g$|\.gif$|\.svg$|\.png$/i,
loader: 'file-loader?name=[name].[ext]'
}
]
},
resolve:{
extension:['','.js']
}
}
我的反应文件
class mapSidebar extends React.Component{
constructor(props,context){
super(props,context);
this.state = {
dataSource: []
};
this.handleUpdateInput = this.handleUpdateInput.bind (this);
}
handleUpdateInput = (value) => {
this.setState({
dataSource: [
value,
value + value,
value + value + value,
],
});
};
render(){
return(
<div>
<Paper zDepth={2}>
<div>Hello</div>
<div>
<AutoComplete
hintText="Type anything"
dataSource={this.state.dataSource}
onUpdateInput={this.handleUpdateInput}
/>
</Paper>
</div>
);
}
}
export default mapSidebar;
如何解决此问题?
答案 0 :(得分:40)
这不是导致问题的箭头功能。 Class properties不是ES6规范的一部分。
handleUpdateInput = (value) => {
// ...
};
如果您希望能够转换此代码,则需要添加class properties babel plugin。
或者,此转换是作为Babel stage 2 preset的一部分提供的。
使用带有类属性的箭头函数可确保始终使用组件作为this
的值调用方法,这意味着此处的手动重新绑定是多余的。
this.handleUpdateInput = this.handleUpdateInput.bind (this);
答案 1 :(得分:4)
这不是箭头函数的问题,而是在类声明中使用它,此代码将在构造函数体或任何其他函数体中工作,但不在类声明中。
代码看起来应该是这样的:
handleUpdateInput(value){
this.setState({
dataSource: [
value,
value + value,
value + value + value,
],
});
};
使用箭头函数可以在任何类方法中完成,但不能在类声明中完成。例如,在构造函数中使用箭头函数:
constructor(props,context){
super(props,context);
this.someFunc = ()=>{
//here function code
};
}