gpt4 book ai didi

javascript - 防止持久状态锁定 VueX 中的应用程序

转载 作者:搜寻专家 更新时间:2023-10-30 22:58:13 25 4
gpt4 key购买 nike

我正在使用 vuex-persistedstate 模块来跟踪我的状态并将其保存到 localStorage。问题是,由于需要保存大量状态,每次更新我的数据时,应用程序都会被锁定。

为了解决这个问题,我尝试使用一个 promise ,允许在生成字符串的同时执行业务计算。字符串准备就绪后,应将其设置为 localStorage

这是我的:

const buildLocalStorageString = async (state) => {
return await JSON.stringify(state);
}

export default new Vuex.Store({
state: { etc, etc, etc },

plugins: [createPersistedState({
key: 'myApp',
setState (key, state, storage) {
buildLocalStorageString(state).then(string => {
storage.setItem(key, string)
})
}
})],
})

问题是,它并没有解决问题。应用程序更新时仍然存在明显的延迟。

最佳答案

All localStorage calls are synchronous. Javascript 是单线程的。将一大块数据保存到本地存储中总是会阻塞所有其他执行。

我会通过拆分数据并将其分别保存到本地存储来解决这个问题。基本上,只需使用多个 createPersistedState

一个极其简单的示例实现可能如下所示

import Vue from 'vue'
import Vuex from 'vuex'
import createPersistedState from "vuex-persistedstate";

Vue.use(Vuex)

const moduleA = {
state: {
a: 'a'
},
mutations: {
updateA(state) {
state.a += 'a';
}
}
}

const moduleB = {
state: {
b: 'b'
}
}

export default new Vuex.Store({
modules: {
moduleA: moduleA,
moduleB: moduleB
},
plugins: [createPersistedState({
key: 'vuex_a',
paths: ['moduleA']
}), createPersistedState({
key: 'vuex_b',
paths: ['moduleB']
})]
})

关于javascript - 防止持久状态锁定 VueX 中的应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51784569/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com