无法在react组件类中使用Arrow函数

TRo*_*esh 18 javascript ecmascript-6 reactjs babeljs ecmascript-next

我已经开始了一个项目,我在后端使用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']
  }
}
Run Code Online (Sandbox Code Playgroud)

我的React文件

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;
Run Code Online (Sandbox Code Playgroud)

如何解决这个问题?

Dan*_*nce 41

这不是引起问题的箭头功能.类属性不是ES6规范的一部分.

handleUpdateInput = (value) => {
  // ...
};
Run Code Online (Sandbox Code Playgroud)

如果您希望能够转换此代码,则需要添加类属性babel插件.

或者,此变换作为Babel的第2阶段预设的一部分提供.

使用带有类属性的箭头函数可确保始终使用组件作为值调用方法this,这意味着此处的手动重新绑定是多余的.

this.handleUpdateInput = this.handleUpdateInput.bind (this);
Run Code Online (Sandbox Code Playgroud)