Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs 在react应用程序中存储常量的全局es6模块-防止垃圾收集_Reactjs_Es6 Modules_React State - Fatal编程技术网

Reactjs 在react应用程序中存储常量的全局es6模块-防止垃圾收集

Reactjs 在react应用程序中存储常量的全局es6模块-防止垃圾收集,reactjs,es6-modules,react-state,Reactjs,Es6 Modules,React State,我想在一个模块(导出)中存储一些变量,作为常量使用,尽管我的react应用程序。我希望避免使用上下文,因为不需要重新渲染组件,而且我需要在react组件外部使用这些常量 为了防止垃圾收集,我应该在哪里做(在哪里导入) 我的一个想法是在我的根组件上导入并重新导出它 编辑: 更准确地说,将有一个组件将设置常量一次(改变变量),以便其他组件或文件可以访问它。因此,您需要的是某种setter/getter模式。尽管我通常不推荐它,除非您知道自己在做什么,因为如果变量更改,React将不会重新渲染,因此您

我想在一个模块(导出)中存储一些变量,作为常量使用,尽管我的react应用程序。我希望避免使用上下文,因为不需要重新渲染组件,而且我需要在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我认为你说的是正确的答案。我已经提供了我自己的答案。