一个使用单个页面的React应用程序。我调用index.html并使用ajax(axio)并更新页面。我不使用任何路由。
我有一些全局变量,并将在整个应用程序范围内使用。例如,变量是原始类型整数。有些变量可能会在应用程序生命周期中进行更新,而某些则保持不变。但是我应该能够从所有react组件/ javascripts中找到它们。它们可能包含与业务相关的常量或示例十进制格式的掩码,因此在每个组件中将它们设为私有将不会有用。
没有必要/理由将其存储在磁盘(localStorage)上。
问题是:在应用程序中存储全局变量foo的最佳方式(性能等)是什么?
window.foo = 10 or
window.sessionStorage.foo = 10
AFAIK,window.foo用于单个页面,sessionStorage允许在同一来源的多个页面中使用。在我使用单个页面的情况下,最好的方法是什么? window.foo 的使用还有其他缺点吗?安全性并不重要,存储的值不敏感。最关键的是性能。
答案 0 :(得分:2)
您可能想使用context而不是两者中的任何一个。从该文档中:
上下文被设计为共享可被视为React组件树(例如当前经过身份验证的用户,主题或首选语言)的“全局”数据。
绝对不要使用全局变量。全局命名空间非常拥挤,通常不是最佳实践。如果您 did 为此使用全局变量,则建议仅使用一个全局变量,并使其引用一个对象,该对象具有要共享的各种信息的属性。请注意,它们将是特定于窗口的。
可能考虑使用sessionStorage
(或可能定期将您的React上下文与其同步)的一个原因是,您是否希望一个窗口中的更改反映在另一个窗口中。来自同一源的两个窗口/选项卡共享相同的sessionStorage
,并且当另一个窗口/选项卡更改存储时可以获取事件(storage
)。因此,如果全局信息是一个应用程序主题(例如,浅色与深色),则如果您通过更新React上下文来响应storage
事件,则在一个选项卡中对其进行更改也会影响另一个选项卡。请注意,sessionStorage
(和localStorage
)仅存储 strings ,因此通常的做法是在存储(JSON.stringify
时将其转换为JSON,而在加载( JSON.parse
。