无法将非箭头函数转换为函数表达式。 React/Preact 构建失败

Posted

技术标签:

【中文标题】无法将非箭头函数转换为函数表达式。 React/Preact 构建失败【英文标题】:Cannot convert non-arrow function to a function expression. React/Preact build fail 【发布时间】:2022-01-13 04:29:46 【问题描述】:

我正在构建一个 React 应用程序,技术上很好,但在构建时它在当前代码上失败:

这是“帮助类”的样子:

class DuplicateChecker 

  hasDuplicates = async () => 
     const checkFirstPage = await this.isDuplicateFoundOnFirst();
...etc

它被导入组件并用于帮助检查内容

这是错误输出

Cannot convert non-arrow function to a function expression.
  14 |   
  15 |
> 16 |   hasDuplicates = async () => 
     |                      ^
  17 |     const checkFirstPage = await this.isDuplicateFoundOnFirst();
  18 |

我的 .babelrc 如下所示:


    "presets": [
        "preact-cli/babel"
    ],
    "plugins": [
        "@quickbaseoss/babel-plugin-styled-components-css-namespace",
        "@babel/plugin-proposal-class-properties",
        "@babel/plugin-transform-arrow-functions",
        "babel-plugin-styled-components"
    ]

一旦我运行构建它仍然失败,不知道为什么,因为它应该正确编译代码

【问题讨论】:

你试过hasDuplicates = async function () 吗? const hasDuplicates = async () => 我忘了提到它是一个类。从现在开始编辑文件 编辑了问题 【参考方案1】:

已解决,解决方法如下:

感谢https://github.com/rschristian

问题出在 .babelrc 文件中,因此我已将其删除并在 preact.config.js 中添加了我的 babel 插件,如下所示:

export default (config, env, helpers) => 
    const  rule  = helpers.getLoadersByName(config, 'babel')[0];
    const babelConfig = rule.options;

    babelConfig.plugins.push(
        '@quickbaseoss/babel-plugin-styled-components-css-namespace',
        'babel-plugin-styled-components'
    );

在此更改之后,构建可以使用原始语法正常工作。

希望这对任何人都有帮助

【讨论】:

【参考方案2】:

这个语法应该可以工作:

TS Playground link

class DuplicateChecker 
  async hasDuplicates () 
    // placeholder code:
    return Math.random() < 0.5;
  



// Use:
(async () => 
  const dc = new DuplicateChecker();
  const duplicatesFound = await dc.hasDuplicates();
  console.log(duplicatesFound);
)();

或者,由于它不是 TypeScript(根据您的问题),您可以在构造函数中分配它,如下所示:

class DuplicateChecker 
  constructor () 
    this.hasDuplicates = async () => 
      // placeholder code:
      return Math.random() < 0.5;
    ;
  

编辑:另一种语法:

class DuplicateChecker 
  hasDuplicates = async function () 
    // placeholder code:
    return Math.random() < 0.5;
  ;

【讨论】:

不应该 babel 处理这个吗? 我不知道您的构建工具是如何设置的,也不知道您为转换源代码配置了哪些规则。我只是为您的方法提供建议的有效语法。 其中一种语法是否解决了问题? 很遗憾没有:/ @AlbertKarter 我在答案的末尾又添加了一种语法(来自my comment 的语法)。它对你有用吗?

以上是关于无法将非箭头函数转换为函数表达式。 React/Preact 构建失败的主要内容,如果未能解决你的问题,请参考以下文章

DataScience之boxcox:scipy.stats.boxcox函数的简介案例应用(将非正态分布数据转换为正态分布数据)之详细攻略

将箭头函数转换为没有变量赋值的命名函数

R语言使用caret包的preProcess函数进行数据预处理:对所有的数据列进行YeoJohnson变换(将非正态分布数据列转换为正态分布数据可以处理负数)设置参数为YeoJohnson

如何使用 JavaScript 将非英文字符转换为英文

将具有 addEventListener 和参数的箭头函数转换为常规 ES5 函数

箭头函数和立即执行函数