【问题标题】:How can I get rid of the warning import/no-anonymous-default-export in React?我怎样才能摆脱 React 中的警告 import/no-anonymous-default-export?
【发布时间】:2023-01-29 10:45:27
【问题描述】:

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

这来自我的 .js 函数,它默认导出几个函数。我不确定如何摆脱,同时仍然能够默认导出多个函数并按照下面的方式保持代码简单。

function init() {}

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

export default {
  init,
  log,
};
 

我可以将文件写为:

export default function init() {}

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

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

【问题讨论】:

    标签: javascript reactjs compilation


    【解决方案1】:

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

    function init() {}
    
    function log(error) {
      console.error(error);
    }
    
    const logger = {
      init,
      log,
    };
    export default logger;
    

    (给它取一个在上下文中最有意义的名字——logger 只是一个例子)

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

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

    然后将它们导入为:

    import { init, log } from './foo.js';
    

    【讨论】:

    • 为什么它很重要?在标准 Web 开发的情况下,为什么我应该遵循此规则?我不记得在任何情况下我对未命名的默认导出有问题。
    • @Velidan 它可能导致的唯一问题是可维护性.如果正确实施,代码的逻辑将起作用,而不管是否为默认导出指定名称。预先将默认导出放入变量将迫使您给它起个名字,为模块的消费者提供您推荐调用导入的约定。没有提示,名称很容易变得非常不一致。 myHttpLibraryMyHttpLibraryMyHTTPLibrary 等。无意的不一致是编程错误的常见原因。没什么大不了的,但这就是为什么有一个 lint 规则。
    • 我明白了,谢谢你的澄清,但老实说,我们通常在某些文件夹索引文件或模块本身中使用“barreling”或默认导出。他们每个人都有一个名字。例如 /formik/index.ts 导出。我们肯定知道它是一个 formik 包。或者 /some-folder/Formik.tsx - 我们再次知道它是一个 formik 包,因为我们导入它并且我们看到它的确切名称。如果我错了,请修复我。我只想了解这条规则的原因
    • @Velidan 有一个准确的名字表明您要导入的内容更好一些。 /formik/index.ts 可能还不够 - import myFormikPackageimport theIndexFormikPackageformikFormik?它应该是什么并不完全明显。除非文件名或(如果是index.js)文件夹名称总是与导出完全匹配,包括大写,那很好——这就是我在使用默认导出时所做的。但从风格的角度来看,这有点难以实施。不小心不一致并不难。这就是为什么我更喜欢命名导出的原因之一。
    • @CertainPerformance,谢谢你的详细解释。我明白你的立场
    【解决方案2】:

    亚洲你的数据在一个变量中,然后导出为默认值。

    //Example

    const data = [
      {
        id: 1,
        name: 'Bertie Yates',
        age: 29,
        image:
          'https://res.cloudinary.com/diqqf3eq2/image/upload/v1595959131/person-2_ipcjws.jpg',
      },
    
      {
        id: 3,
        name: 'Larry Little',
        age: 36,
        image:
          'https://res.cloudinary.com/diqqf3eq2/image/upload/v1586883423/person-4_t9nxjt.jpg',
      },
      {
        id: 4,
        name: 'Sean Walsh',
        age: 34,
        image:
          'https://res.cloudinary.com/diqqf3eq2/image/upload/v1586883417/person-3_ipa0mj.jpg',
      },
    ]
    export default data
    

    【讨论】:

    • 您能否发布您遇到的确切警告以及如何触发?
    猜你喜欢
    • 2022-01-12
    • 2021-03-19
    • 2011-03-12
    • 2021-12-19
    • 2019-07-28
    • 2012-12-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多