如何使用 Svelte Store 在选项卡之间更新数据
How to update data between tabs using Svelte Store
我正在 Svelte 中创建一个商店,它订阅值更改并将值存储在 localStorage 上。
打开页面时,有一个输入标签,其值绑定到商店。一切都按预期工作,刷新后最后一个值就在那里。
我的问题和我不知道如何解决的问题(如果可能的话)打开同一页面的第二个选项卡,当我输入一个选项卡时,我想在另一个选项卡上看到值更新。
(我知道问题是第二个选项卡不知道 localStorage 的变化)
我的 hack 解决方案是间隔读取 localStorage 的更新值,但这显然是 hack 而不是解决方案。
我们如何解决这样的问题?
这是使用的 2 个文件的要点。 https://gist.github.com/MrAmericanMike/b2ddea28e4a4716e43abe03c6211c8b7
有两种解决方案,具体取决于用例。
使用事件侦听器
您可以在 window 上注册一个事件侦听器来侦听 storage
事件并检查您感兴趣的项目是否已更改。:
window.addEventListener('storage', event => {
if (event.key == 'DATA') {
// do something with the newly updated store
}
})
https://developer.mozilla.org/en-US/docs/Web/API/Window/storage_event
完整示例在这里:
使用广播频道
这是一个比较棘手的问题,适合您不希望数据实际持久化的用例(即:如果用户关闭,它会重置为默认值 all 选项卡)。
https://developer.mozilla.org/en-US/docs/Web/API/Broadcast_Channel_API
我正在 Svelte 中创建一个商店,它订阅值更改并将值存储在 localStorage 上。
打开页面时,有一个输入标签,其值绑定到商店。一切都按预期工作,刷新后最后一个值就在那里。
我的问题和我不知道如何解决的问题(如果可能的话)打开同一页面的第二个选项卡,当我输入一个选项卡时,我想在另一个选项卡上看到值更新。
(我知道问题是第二个选项卡不知道 localStorage 的变化)
我的 hack 解决方案是间隔读取 localStorage 的更新值,但这显然是 hack 而不是解决方案。
我们如何解决这样的问题?
这是使用的 2 个文件的要点。 https://gist.github.com/MrAmericanMike/b2ddea28e4a4716e43abe03c6211c8b7
有两种解决方案,具体取决于用例。
使用事件侦听器
您可以在 window 上注册一个事件侦听器来侦听 storage
事件并检查您感兴趣的项目是否已更改。:
window.addEventListener('storage', event => {
if (event.key == 'DATA') {
// do something with the newly updated store
}
})
https://developer.mozilla.org/en-US/docs/Web/API/Window/storage_event
完整示例在这里:
使用广播频道
这是一个比较棘手的问题,适合您不希望数据实际持久化的用例(即:如果用户关闭,它会重置为默认值 all 选项卡)。
https://developer.mozilla.org/en-US/docs/Web/API/Broadcast_Channel_API