Vue。如何查看本地存储的变化?

Posted

技术标签:

【中文标题】Vue。如何查看本地存储的变化?【英文标题】:Vue. How to watch localstorage for changes? 【发布时间】:2019-10-12 11:45:51 【问题描述】:

另一个脚本(没有 vue.js)在本地存储中写入一些数据,例如数组“链接”。但是我的 vue 应用程序只有在页面重新加载后才能看到它(因为 localstorage 在 vue 中没有反应)。如何在不重新加载页面的情况下查看 localstorage 的更改和显示?

【问题讨论】:

Is there any way to 'watch' for localstorage in Vuejs?的可能重复 @StevenSpungin 不,这是另一种情况 "(因为 localstorage 在 vue 中没有反应)" localStorage 没有反应。不仅在 Vue 中????我看到的唯一可能性是订阅状态或 vuex 中的操作。然后在每次尝试做某事时检查 localStorage。 虽然这不是您要问的,但如果可能的话,我建议您重新考虑您的应用程序架构,因为即使轮询会起作用,它也是必不可少的,而且在性能方面并不是最好的。由于您还没有公开您的代码,因此很难提出具体的建议,但是如果您还没有的话,不妨看看 vuex! 【参考方案1】:

本地存储并不是真正为不断更新的动态数据而设计的,但假设您无法控制它。

VueJS 只监视其组件中的数据,因此您不能使用 VueJS。

一个不太好的解决方案是使用 setInterval (https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/setInterval),它每 x 秒运行一次并从 localStorage 获取值。

它既不漂亮也不高效,就像

let name = 'Bergur'
setInterval(function() 
name = localStorage.getItem('name')
, 5000)

【讨论】:

【参考方案2】:

如果您想查看不受您影响的本地存储更改,可以对其进行轮询。

data() 
    return 
      lastChange: null,
      timer: null
    
  ,
  created() 
    let curVal = localStorage.getItem('foo');
    this.lastChange = new Date()
    this.timer = setInterval(() => 
      const newVal = localStorage.getItem('foo');
      if (newVal !== curVal) 
        curVal = newVal;
        // fireEvent, update state, etc
        // or update data in your component
        this.lastChange = new Date()
      
    , 1000);
  ,
  beforeDestroy() 
    cleaInterval(this.timer)
  

【讨论】:

以上是关于Vue。如何查看本地存储的变化?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用道具和本地存储制作 vue3 暗模式?

如何在Vue中导入本地存储的xml文件并进行编辑?

vue3.0 监听本地存储

如何在 Firefox 中查看/删除本地存储?

Vue的Vue-ls 封装的本地存储的方法

vue项目数据本地存储