当我将模块添加到 Global React 对象时会发生什么?

What happens when I add a module to the Global React object?

在 React 中向 'global' 添加模块是否昂贵?我希望在需要时有一个可用的模块,而不必依赖于将其导入每个文件。

我将以下内容添加到 'index.jsx' 文件中:

import axios from 'axios';
global.axios = axios;

然后引用全局使用axios

您可能的意思是昂贵,它会增加总体 file-size 或内存使用量吗?不,它不会,除非,例如,您使用代码拆分并且不将您的公共或供应商包提取到单独的文件中。

最佳做法是尽量不填充全局范围,主要有两个原因:

  • 任何成员都可以访问全局范围并搞砸你在那里定义的内容。
  • 如果在全局范围内放太多东西,肯定会出现名称冲突。

您的问题不是特定于 React 或 ES6 的。没有“全局反应对象”。在浏览器上下文中,全局范围是 window 对象;所以你会使用 window.axios = axios;。在节点环境中,它将是 global.axios = axios;。设置全局变量在某些情况下非常有用,例如在测试中。在节点中为 运行 设置测试时,通常在全局对象上设置断言方法。

导入 axios 时,将创建单个实例。在全局范围内放置对 axios 的引用不会给您带来任何好处,但会带来错误的可能性。另外,在我看来,在每个文件中定义 dependencies/imports 将有助于某些编辑器的可读性和智能感知。

发出网络请求的库,如 axios,通常放在服务模块或 API 实用程序中,而不是在每个模块中。但是,如果 axios 确实是您应用程序不可或缺的一部分,并且您在许多地方导入它,则可以使用类似 ProvidePlugin 的东西(如果您使用的是 webpack)。

ProvidePlugin

Automaticlly load modules instead of having to import or require them everywhere.