Javascript 将模块添加到全局React对象时会发生什么?

Javascript 将模块添加到全局React对象时会发生什么?,javascript,reactjs,ecmascript-6,react-16,Javascript,Reactjs,Ecmascript 6,React 16,在react中向“全局”添加模块是否昂贵?我希望有一个模块在需要时可用,而不必依赖于将其导入每个文件 我正在将以下内容添加到“index.jsx”文件中: import axios from 'axios'; global.axios = axios; 然后使用axios时,请参考全局配置。您可能的意思是,它会增加总体文件大小或内存使用量吗?不,它不会,除非,例如,您使用代码拆分,并且不将公共或供应商捆绑包提取到单独的文件中 最好的做法是尽量不填充全局范围,主要原因有两个: 任何成员都可以访

在react中向“全局”添加模块是否昂贵?我希望有一个模块在需要时可用,而不必依赖于将其导入每个文件

我正在将以下内容添加到“index.jsx”文件中:

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

然后使用axios时,请参考全局配置。

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

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

  • 任何成员都可以访问全局范围并破坏您在其中定义的内容
  • 如果在全局范围中放置太多内容,则必然会出现名称冲突
你的问题不是具体的反应或ES6。没有“全局对象”。在浏览器上下文中,全局范围是窗口对象;因此您将使用
window.axios=axios。在节点环境中,它将是
global.axios=axios。设置全局变量在某些情况下非常有用,例如在测试中。设置要在节点中运行的测试时,通常会在全局对象上设置断言方法

导入axios时,将创建一个实例。在全局范围内放置对axios的引用不会带来任何好处,但会带来bug的可能性。此外,在我看来,在每个文件中定义依赖项/导入将有助于提高某些编辑器的可读性和intellisense

发出网络请求的库(如axios)通常放在服务模块或API util中,而不是放在每个模块中。然而,如果axios真的是你应用程序中不可或缺的一部分,你可以在很多地方导入它,你可以使用类似的东西(如果你使用的是webpack)

ProvidePlugin

自动加载模块,而不必在任何地方导入
或要求
模块


它并不比普通的环球旅行更贵。然而,通常使用globals会违背最佳实践。我的想法是正确的,但这是否取决于模块的大小?将一个模块导入到需要它的文件中,而不是将其导入并分配给一个全局模块以便以后访问,后者的内存不是更昂贵吗?还有资源?当我将模块导入到每个文件时会发生什么?它是多次创建实例(多次导入)还是仅引用它?如果引用,那么与导入到每个文件相比,全局分配不会同样昂贵吗?只引用模块。它们只加载一次并存储在内存中。通过导入模块,表示此代码可以访问该模块。通常,将模块导入到每个需要它的文件是最好的。就成本而言,只分配几个变量是不同的。会发生什么?每当你无缘无故地将模块暴露在全局范围内时,上帝就会杀死一只小猫。导入存在的全部原因是全局很难管理。不要这样做。导入更清晰,也不会更昂贵。感谢您对此的回答,是的,我同意,这不是最好的全球范围,这只是一个例外,因为我们使用axios,并且在使用allot时,我希望尽量减少导入文件的次数。将其纳入全球范围似乎是正确的……但并非最佳实践,可能会像你所说的那样解决其他问题。将使其远离全球范围。我使用的是node变量,但当然构建会将其转换为使用浏览器“Window”对象。@quinton我更新了我的答案,并提供了一些详细信息。如果最佳实践对您的特定用例有意义,那么打破最佳实践并没有错,只要您了解自己在做什么。