用于在 React 应用程序中存储常量的全局 es6 模块 - 防止垃圾收集
Global es6 module to store constants in react app - prevent garbage collection
我想在模块(导出)中存储一些变量,以在我的 React 应用程序中用作常量。我想避免上下文,因为不需要重新渲染组件,而且我需要在我的反应组件之外使用这些常量。
我应该在哪里做(导入到哪里),以防止垃圾收集?
我的一个想法是在我的根组件之上导入并重新导出它。
编辑:
更准确的说,会有一个组件将常量设置一次(改变变量),以便其他组件或文件可以访问它。
所以,您需要的是某种 setter/getter 模式。虽然我通常不推荐它,除非你知道你在做什么,因为 React 不会在变量更改时重新渲染 并且因此你需要 确保变量在使用前设置好.
您应该拥有类似于下面示例的内容,以便它按您想要的方式工作。您可以在 Codesandbox.
上找到它的示例
export let MY_VARIABLE = "";
export const setMyVariable = value => (MY_VARIABLE = value);
PS:我在代码中添加了一些 console.log
,以便您了解 import/get/set 的行为方式。
您可以在 src 文件夹中创建一个 config.js 并编写您的常量变量,如
//config.js
module.exports = {
CONST_VAR : 'const value',
}
在您的组件中导入 config.js 并使用它
深入研究后,我发现 es6 模块规范指出:
当导入你的模块时,它得到 loaded
=> parsed
=> evaluated
和 cached
(单例)。它还说当您导入模块时,它的值是通过引用传递的(也称为赋值)。我没有发现任何提及何时或如何从该缓存中卸载 es6 模块的内容。
这意味着,当您导入一个模块后,只要程序存在,它就一直存在 运行,并且所有模块都直接访问它的值。
参考
我想在模块(导出)中存储一些变量,以在我的 React 应用程序中用作常量。我想避免上下文,因为不需要重新渲染组件,而且我需要在我的反应组件之外使用这些常量。
我应该在哪里做(导入到哪里),以防止垃圾收集?
我的一个想法是在我的根组件之上导入并重新导出它。
编辑:
更准确的说,会有一个组件将常量设置一次(改变变量),以便其他组件或文件可以访问它。
所以,您需要的是某种 setter/getter 模式。虽然我通常不推荐它,除非你知道你在做什么,因为 React 不会在变量更改时重新渲染 并且因此你需要 确保变量在使用前设置好.
您应该拥有类似于下面示例的内容,以便它按您想要的方式工作。您可以在 Codesandbox.
上找到它的示例export let MY_VARIABLE = "";
export const setMyVariable = value => (MY_VARIABLE = value);
PS:我在代码中添加了一些 console.log
,以便您了解 import/get/set 的行为方式。
您可以在 src 文件夹中创建一个 config.js 并编写您的常量变量,如
//config.js module.exports = { CONST_VAR : 'const value', }
在您的组件中导入 config.js 并使用它
深入研究后,我发现 es6 模块规范指出:
当导入你的模块时,它得到 loaded
=> parsed
=> evaluated
和 cached
(单例)。它还说当您导入模块时,它的值是通过引用传递的(也称为赋值)。我没有发现任何提及何时或如何从该缓存中卸载 es6 模块的内容。
这意味着,当您导入一个模块后,只要程序存在,它就一直存在 运行,并且所有模块都直接访问它的值。
参考