如何摆脱 React 中的警告 import/no-anonymous-default-export?

You*_*Dad 19 javascript compilation reactjs

我在控制台中收到警告:“在导出为模块默认导入/无匿名默认导出之前将对象分配给变量。”

这是来自我的 .js 函数,它默认导出几个函数。我不知道如何摆脱,同时仍然能够默认导出几个函数并保持代码简单,如下所示。

function init() {}

function log(error) {
  console.error(error);
}

export default {
  init,
  log,
};
 
Run Code Online (Sandbox Code Playgroud)

我可以将文件写为:

export default function init() {}

export function log(error) {
  console.error(error);
}
Run Code Online (Sandbox Code Playgroud)

是否有我需要更改的设置,我可以做些什么?

Cer*_*nce 30

它告诉您在导出之前为要导出的对象指定一个名称,以使所使用的名称更有可能在整个代码库中保持一致。例如,更改为:

function init() {}

function log(error) {
  console.error(error);
}

const logger = {
  init,
  log,
};
export default logger;
Run Code Online (Sandbox Code Playgroud)

(给它在上下文中最有意义的任何名称 -logger只是一个例子)

但是如果你要导出多个东西,使用命名导出会更有意义 IMO。另一种选择是:

export function init() {}

export function log(error) {
  console.error(error);
}
Run Code Online (Sandbox Code Playgroud)

然后将它们导入为:

import { init, log } from './foo.js';
Run Code Online (Sandbox Code Playgroud)

  • 为什么它很重要?在标准 Web 开发的情况下,我有什么理由应该遵循这条规则?我不记得在未命名的默认导出方面遇到过任何问题。 (6认同)
  • @Velidan 它可能导致的唯一问题是*可维护性*。如果正确实现,代码的逻辑将起作用,无论是否为默认导出指定名称。预先将默认导出放入变量中将强制您“为其命名”,从而为模块的使用者提供您建议的导入名称的约定。如果没有任何提示,这些名称可能会变得非常不一致。`myHttpLibrary` 或 `MyHttpLibrary` 或 `MyHTTPLibrary` 等。无意的不一致是编程中错误的常见原因。没什么大不了的,但这就是为什么有 lint 规则。 (2认同)
  • @Velidan 有一个*确切的名称*来指示您要导入的内容会更好一些。`/formik/index.ts` 可能还不够 - `import myFormikPackage`?`导入IndexFormikPackage`?“福米克”?“福米克”?并不完全明显它应该是什么。除非文件名或(如果是“index.js”)文件夹名称始终与导出完全匹配,包括大小写,那就太好了 - 这就是我在使用默认导出时所做的。但从风格的角度来看,执行起来有点困难。不小心出现不一致并不难。这就是我更喜欢命名导出的原因之一。 (2认同)