javascript - 使用 javascript globalThis 进行状态管理
问题描述
这似乎是一个疯狂的想法,但如果我使用 globalThis 来存储我的浏览器唯一 SPA 的全局状态会有什么问题。
我在想这样的事情
globalThis.state = {...initialStateData}; // attach a property to globalThis and initialize
//later in any component, mutate the value
globalThis.state.counter = 45;
//yet in some other area, access and display the value
console.log(globalThis.state.counter);
这可以通过在混合中引入代理并创建类似于轻量级 redux 的东西来进一步实现。
我在 chrome 中对此进行了测试,它可以工作(我的意思是 chrome 不反对我将我的数据附加到 globalThis)。
我的问题是,这是一个疯狂的想法,不应该在生产应用程序中使用,因为我可能在无知中违反了一些标准?
或者,globalThis 的行为会随着时间而改变,浏览器不允许用户附加属性到这个特定的对象?
编辑:这个问题是关于纯香草 JS 而不是关于 redux 或反应甚至打字稿。
如何在 Deno 中定义全局变量?将是与当前查询最接近的匹配项
解决方案
修改浏览器globalThis
的对象或window
对象是非常规的,它会产生一些难以调试或修复的问题。这也是一种对象污染& eslint/jshint 也会抱怨& typescript 会抛出编译时间错误..不要在生产中这样做,因为从长远来看它会非常糟糕..其中之一是属性名称冲突并且会出现很多问题。我不知道其中的每一个,但您可以轻松阅读一些关于这种行为的中型书籍/文章。这也是为什么现代 npm 包不接触这些对象的原因,因为globalThis
不允许modules
......尝试使用globalThis
/window
作为read-only
对象.. 不要改变它的道具..
希望你明白我说的..
推荐阅读
- vba - 将一个帐户客户端规则复制到所有客户端规则
- draftjs - 行间距反应草稿所见即所得
- javascript - 每次单击按钮时如何移动画布对象?
- c++ - 访问冲突读取位置...,这让我很困惑
- android - 在颤振中,我正在使用 AlertDialog,它有 2 个操作按钮 Ok 和 Cancel,单击 Ok 时,我想转到新屏幕并结束当前屏幕?
- microsoft-edge - Edge Chromium 无法从“Window”读取“localStorage”属性:拒绝访问此文档
- kubernetes - 如何降级 GKE 主机并退出快速通道
- c - 将用户输入字符串打印到最小的用户输入文件中
- mongodb - Mongo-Kafka 源连接器无法恢复更改流
- email - 根据选择选择案例以通过电子邮件发送不同的工作表