当前位置: 首页 > 面试题库 >

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

卫劲
2023-03-14
问题内容

我已经开始了一个项目,其中我在前端使用React JS,在后端使用node
js。我使用webpack捆绑了JS文件。我将babel与其他必要的东西一起使用。当我在react类中使用箭头函数时,它会给出语法错误,例如:

模块构建失败:SyntaxError:意外令牌

但是我可以在节点中使用Arrow函数,没有任何问题。

这是我的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']
  }
}

我的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;

如何解决这个问题?


问题答案:

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

handleUpdateInput = (value) => {
  // ...
};

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

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

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

this.handleUpdateInput = this.handleUpdateInput.bind (this);


 类似资料:
  • 假设我有一个函数,它更新状态并将其映射到一个onPoint到一个

  • 嗨,我是新来的反应本机和尝试渲染组件调用一个函数内渲染,但它似乎不工作。 我的职能: 如果我这样做,效果会更好: 但不是这个: 我不明白为什么第二个代码不起作用

  • 是否可以在全局做点工作,让hook可以在组件外的js 中使用?

  • 使用类型脚本和 React,我们不再需要扩展 ,以便编译器知道所有反应组件 prop 都可以有子级: 然而,对于无状态的功能组件来说,情况似乎不是这样: 发出编译错误: 错误:(102,17)TS2339:属性“子”在“MyProps”类型上不存在。 我想这是因为编译器确实无法知道一个普通函数将在props参数中被赋予。 所以问题是我们应该如何在TypeScript的无状态函数组件中使用子元素?

  • 下面的代码出现了最奇怪的错误。 /src/components/competitions/TheVault表单。js第5行:在函数“contactform”中调用React钩子“useForm”,该函数既不是React函数组件,也不是定制的React钩子函数React钩子/钩子规则 搜索关键字以了解有关每个错误的更多信息。 我刚刚安装了react hook表单并运行了演示代码。

  • 我有以下react功能组件来帮助支持react路由器所需的身份验证路由。 我需要将其从功能组件转换为类组件,以便利用React.component的componentDidMount方法。不幸的是,我很难弄清楚如何迁移它。如果我照原样做,我需要复制组件和…rest参数,但我不知道怎么做。我想我可以用这个.props.Component获得组件参数,但我不确定如何拉…rest。我是JSX和ES6的新