Reactjs 在react应用程序中存储常量的全局es6模块-防止垃圾收集
我想在一个模块(导出)中存储一些变量,作为常量使用,尽管我的react应用程序。我希望避免使用上下文,因为不需要重新渲染组件,而且我需要在react组件外部使用这些常量 为了防止垃圾收集,我应该在哪里做(在哪里导入) 我的一个想法是在我的根组件上导入并重新导出它 编辑:Reactjs 在react应用程序中存储常量的全局es6模块-防止垃圾收集,reactjs,es6-modules,react-state,Reactjs,Es6 Modules,React State,我想在一个模块(导出)中存储一些变量,作为常量使用,尽管我的react应用程序。我希望避免使用上下文,因为不需要重新渲染组件,而且我需要在react组件外部使用这些常量 为了防止垃圾收集,我应该在哪里做(在哪里导入) 我的一个想法是在我的根组件上导入并重新导出它 编辑: 更准确地说,将有一个组件将设置常量一次(改变变量),以便其他组件或文件可以访问它。因此,您需要的是某种setter/getter模式。尽管我通常不推荐它,除非您知道自己在做什么,因为如果变量更改,React将不会重新渲染,因此您
更准确地说,将有一个组件将设置常量一次(改变变量),以便其他组件或文件可以访问它。因此,您需要的是某种setter/getter模式。尽管我通常不推荐它,除非您知道自己在做什么,因为如果变量更改,React将不会重新渲染,因此您需要确保在使用变量之前设置该变量 为了让它按照你想要的方式工作,你应该有下面的例子。你可以找到一个关于它的例子
export let MY_VARIABLE=”“;
export const setMyVariable=value=>(MY_VARIABLE=value);
PS:我在代码中添加了一些
console.log
,以便您查看导入/获取/设置的行为。因此,您需要的是某种setter/getter模式。尽管我通常不推荐它,除非您知道自己在做什么,因为如果变量更改,React将不会重新渲染,因此您需要确保在使用变量之前设置该变量
为了让它按照你想要的方式工作,你应该有下面的例子。你可以找到一个关于它的例子
export let MY_VARIABLE=”“;
export const setMyVariable=value=>(MY_VARIABLE=value);
PS:我在代码中添加了一些
console.log
,以便您查看导入/获取/设置的行为。您可以在src文件夹中创建一个config.js,并编写常量变量,如
//config.js
module.exports={
常量变量:“常量值”,
}
在组件中导入config.js并使用它您可以在src文件夹中创建一个config.js并编写常量变量,如 //config.js module.exports={ 常量变量:“常量值”, }
在您的组件中导入config.js并使用它深入研究后,我发现es6模块规范说明: 导入模块时,它会被加载
=>解析=>评估和缓存
(单例)。它还表示,当您导入模块时,其值通过引用传递(也称为赋值)。我没有发现任何关于何时或如何从缓存中卸载es6模块的内容
这意味着,当你导入一个模块时,只要程序在运行,它就在那里,所有模块都直接访问它的值
参考文献
深入研究后,我发现es6模块规范规定:
导入模块时,它会被加载
=>解析=>评估和缓存
(单例)。它还表示,当您导入模块时,其值通过引用传递(也称为赋值)。我没有发现任何关于何时或如何从缓存中卸载es6模块的内容
这意味着,当你导入一个模块时,只要程序在运行,它就在那里,所有模块都直接访问它的值
参考文献
卸载组件时(例如从navigator中卸载),是否会对导入的模块进行垃圾回收?您能否详细说明这一问题的原因?为什么不垃圾收集常量对您的应用程序很重要?有一个组件将设置一次常量,以便其他组件或文件可以访问它。那么这不是一个常量,请用这些信息编辑您的问题,我将更新我的答案。检查更新的答案和codesandbox实现,看看它是否解决了您的问题。:)当组件被卸载时(例如从导航器中卸载),这个导入的模块不是被垃圾收集了吗?你能详细解释一下为什么这很重要吗?为什么不垃圾收集常量对您的应用程序很重要?有一个组件将设置一次常量,以便其他组件或文件可以访问它。那么这不是一个常量,请用这些信息编辑您的问题,我将更新我的答案。检查更新的答案和codesandbox实现,看看它是否解决了您的问题。:)当组件卸载(例如从导航器)时,导入的模块不是垃圾收集吗?当组件卸载(例如从导航器)时,导入的模块不是垃圾收集吗?只要存在对变量的活动引用,变量就不会垃圾收集。这正是问题所在。只要我的react应用程序运行,我如何保证引用的存在?我不确定这一点,但据我所知,只要模块保持加载状态,并且我不知道在模块加载后如何卸载模块,模块的导出就不会被垃圾收集loaded@apokryfos我认为你说的是正确的答案。我已经提供了我自己的答案。只要存在对变量的活动引用,该变量就不会被垃圾回收。这正是问题所在。只要我的react应用程序运行,我如何保证引用的存在?我不确定这一点,但据我所知,只要模块保持加载状态,并且我不知道在模块加载后如何卸载模块,模块的导出就不会被垃圾收集loaded@apokryfos我认为你说的是正确的答案。我已经提供了我自己的答案。