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

时间:2019-05-13 08:24:55

标签: javascript window global-variables session-storage

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

我有一些全局变量,并将在整个应用程序范围内使用。例如,变量是原始类型整数。有些变量可能会在应用程序生命周期中进行更新,而某些则保持不变。但是我应该能够从所有react组件/ javascripts中找到它们。它们可能包含与业务相关的常量或示例十进制格式的掩码,因此在每个组件中将它们设为私有将不会有用。

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

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

window.foo = 10 or
window.sessionStorage.foo = 10

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

1 个答案:

答案 0 :(得分:2)

您可能想使用context而不是两者中的任何一个。从该文档中:

  

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

绝对不要使用全局变量。全局命名空间非常拥挤,通常不是最佳实践。如果您 did 为此使用全局变量,则建议仅使用一个全局变量,并使其引用一个对象,该对象具有要共享的各种信息的属性。请注意,它们将是特定于窗口的。

可能考虑使用sessionStorage(或可能定期将您的React上下文与其同步)的一个原因是,您是否希望一个窗口中的更改反映在另一个窗口中。来自同一源的两个窗口/选项卡共享相同的sessionStorage,并且当另一个窗口/选项卡更改存储时可以获取事件(storage)。因此,如果全局信息是一个应用程序主题(例如,浅色与深色),则如果您通过更新React上下文来响应storage事件,则在一个选项卡中对其进行更改也会影响另一个选项卡。请注意,sessionStorage(和localStorage)仅存储 strings ,因此通常的做法是在存储(JSON.stringify时将其转换为JSON,而在加载( JSON.parse