不能在react中使用胖箭头函数(ES6)

IT技术 javascript reactjs ecmascript-6
2021-04-27 18:34:33

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

这:

handleItemClick = (e, { name }) => this.setState({ activeItem: name });

给我:

BabelLoaderError: SyntaxError: Unexpected token (20:20)

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

然而,这工作得很好:

onClick={ (arg) => {//Do something} };

我的 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,
                ]
            }
        ]
    }
};
1个回答

您正在尝试使用不属于 ES6 且 es2015 未涵盖的类字段和react预设。

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

query: {
    presets: ['es2015', 'react'],
    plugins: ["transform-class-properties"]
}   

或者使用包含转换插件babel stage-2 预设

query: {
    presets: ['es2015', 'react', 'stage-2']
}

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