我在一个Vue js项目中使用localStorage作为数据源。我可以读写,但是找不到一种方法来React性地使用它。我需要刷新以查看我所做的任何更改。
我使用数据作为多个组件的 prop ,当我从组件写入localStorage
时,我使用updateData
方法在主App.vue文件上触发forceUpdate
。
强制更新在这里不起作用。有没有办法在不刷新页面的情况下完成这个操作?
...............
data: function () {
return {
dataHasLoaded: false,
myData: '',
}
},
mounted() {
const localData = JSON.parse(localStorage.getItem('myData'));
const dataLength = Object.keys(localData).length > 0;
this.dataHasLoaded = dataLength;
this.myData = localData;
},
methods: {
updateData(checkData) {
this.$forceUpdate();
console.log('forceUpdate on App.vue')
},
},
...............
3条答案
按热度按时间toe950271#
我是这样解决这个问题的:本地存储不是被动的,但是它非常适合在刷新时保持状态。
假设我试图查看我保存在
localStorage
中的令牌的更新,它可能如下所示:最初的问题是我试图使用计算getter中的
localStorage.getItem()
,但Vue不知道本地存储中发生了什么,当有其他选项时,专注于使其React是愚蠢的。诀窍是最初从本地存储中获取,并在发生变化时不断更新本地存储值,但保持一个Vue知道的React值。bvjveswy2#
对于任何一个面临同样困境的人来说,我不能用我想要的方式解决它,但我找到了一种方法。
这样做效果很好,可以从一个数据源真实的更新所有数据。
qyyhg6bp3#
由于本地存储中的项目可能会被当前可见的vue模板之外的其他东西更新,我希望更新函数发出一个变化,vue可以对此做出React。
我的localstorage.set在更新数据库后会执行以下操作:
在mounted()中,我有一个监听器,它更新forceRedraw,等等,它强制重绘。