不能使用胖箭头功能(ES6)进行反应

day*_*ays 2 javascript ecmascript-6 reactjs

我在使用胖箭头功能时遇到了一些问题.如果函数不是匿名的,它会抱怨语法并且不会编译.

这个:

handleItemClick = (e, { name }) => this.setState({ activeItem: name });
Run Code Online (Sandbox Code Playgroud)

给我:

BabelLoaderError: SyntaxError: Unexpected token (20:20)
Run Code Online (Sandbox Code Playgroud)

它指向等号(handleItemClick'=').

然而这很好用:

onClick={ (arg) => {//Do something} };
Run Code Online (Sandbox Code Playgroud)

我的webpack配置有什么问题,或者我错过了什么?感谢任何提示.

module.exports = {
  entry: PATHS.app_path,
    output:{
        path: PATHS.build,
        filename: 'index.js'
    },
    devServer:{
        inline: true,
        port: 3333,
        contentBase: PATHS.build,
        publicBase: PATHS.build,
        historyApiFallback: true
    },
    resolve: {
        root: path.resolve('./public'),
        extensions: ['', '.js', '.jsx']
    },
    module: {
        loaders: [
            {
                test: /\.jsx?$/,
                exclude: /(node_modules|bower_components)/,
                loader: 'babel',
                query: {
                    presets: ['es2015', 'react']
                }
            },
            {
                test: /\.css$/,
                loader: 'style-loader'
            },
            {
                test: /\.css$/,
                loader: 'css-loader',
                query: {
                    modules: true,
                    localIdentName: '[local]'
                    //localIdentName: '[name]__[local]___[hash:base64:5]'
                }
            },
            { test: /\.(png|woff|woff2|eot|ttf|jpg)$/, loader: 'url-loader?limit=100000' },
            {
                test: /.*\.svg$/,
                loaders: [
                    'file-loader',
                    'svgo-loader?' + svgoConfig,
                ]
            }
        ]
    }
};
Run Code Online (Sandbox Code Playgroud)

Ori*_*ori 13

您正在尝试使用不属于ES6的类字段,并且不在es2015中,并且会对预设做出反应.

您可以使用Class属性转换babel插件启用它:

query: {
    presets: ['es2015', 'react'],
    plugins: ["transform-class-properties"]
}   
Run Code Online (Sandbox Code Playgroud)

或者使用babel stage-2预设,包括转换插件:

query: {
    presets: ['es2015', 'react', 'stage-2']
}
Run Code Online (Sandbox Code Playgroud)

不要忘记npm install你选择的那个.