Javascript:为单页应用程序存储全局变量

Javascript:为单页应用程序存储全局变量,javascript,window,global-variables,session-storage,Javascript,Window,Global Variables,Session Storage,A使用单个页面创建一个react应用程序。我调用index.html并使用ajax(axio)更新页面。我不使用任何路由 我有一些全局变量,将在整个应用程序范围内使用。例如,变量是基元类型的整数。一些变量可能会在应用程序生命周期中更新,一些变量保持不变。但我应该能够从所有react组件/Java脚本中访问它们。它们可能包含与业务相关的常量或示例十进制格式掩码,在每个组件中保持它们的私有性是没有用的 没有必要/理由将其存储在磁盘(localStorage)上 问题是:在应用程序中存储全局变量foo

A使用单个页面创建一个react应用程序。我调用index.html并使用ajax(axio)更新页面。我不使用任何路由

我有一些全局变量,将在整个应用程序范围内使用。例如,变量是基元类型的整数。一些变量可能会在应用程序生命周期中更新,一些变量保持不变。但我应该能够从所有react组件/Java脚本中访问它们。它们可能包含与业务相关的常量或示例十进制格式掩码,在每个组件中保持它们的私有性是没有用的

没有必要/理由将其存储在磁盘(localStorage)上

问题是:在应用程序中存储全局变量foo的最佳方式(性能等)是什么

window.foo = 10 or
window.sessionStorage.foo = 10
好的,window.foo用于单个页面,sessionStorage允许在同一来源的多个页面中使用。在我的情况下,当我使用单个页面时,什么是最好的?window.foo的使用还有其他缺点吗?安全性不重要,存储的值不敏感。最关键的是性能

您可能想使用,而不是使用这两个选项中的任何一个。根据该文件:

上下文被设计为共享可被视为React组件树的“全局”数据,例如当前经过身份验证的用户、主题或首选语言

绝对不要使用全局变量。全局命名空间非常拥挤,添加到其中通常不是最佳做法。如果您确实为此使用了全局,我建议您只使用一个,并让它引用一个对象,该对象具有您想要共享的各种信息的属性。请注意,它们是特定于窗口的


一个可能考虑使用<代码> SeaStestys<代码>的原因(或者可能周期性地同步您的反应上下文),如果您希望在一个窗口中的更改反映在另一个窗口中。来自同一来源的两个窗口/选项卡共享相同的

会话存储
,当另一个窗口/选项卡更改存储时,可以获取事件(
存储
)。因此,如果全局信息是一个应用程序主题(例如,明暗对比),如果您通过更新React上下文来响应
存储
事件,则在一个选项卡中更改它也会影响另一个选项卡。请注意,
sessionStorage
(和
localStorage
)只存储字符串,因此通常的做法是在存储(
JSON.stringify
)时转换为JSON,在加载(
JSON.parse
)时从JSON转换为JSON。

谢谢您的回答,我们已经在使用redux的另一个问题,是否可以将它们混合使用?我认为上下文是redux的对应项,不可能完全从redux切换。@benchpresser-对不起,我没有使用redux。