Javascript 我应该在Vuex中将状态初始化代码放在哪里?
Vuex store应该只保留状态代码结构以及如何修改该状态(突变、动作),还是保留实际的状态初始化和值 当我的状态初始化代码变得更加复杂时,我开始对此感到疑惑,因为我在Vuex体系结构中看不到任何可以将此代码放入的自然位置 假设我有这样一家商店:Javascript 我应该在Vuex中将状态初始化代码放在哪里?,javascript,vue.js,vuex,Javascript,Vue.js,Vuex,Vuex store应该只保留状态代码结构以及如何修改该状态(突变、动作),还是保留实际的状态初始化和值 当我的状态初始化代码变得更加复杂时,我开始对此感到疑惑,因为我在Vuex体系结构中看不到任何可以将此代码放入的自然位置 假设我有这样一家商店: export default { state: { list: [] }, mutations: { addItem(state, { item }) { state.list.push(item);
export default {
state: {
list: []
},
mutations: {
addItem(state, { item }) {
state.list.push(item);
}
}
}
如果列表开始为空,就足够了。但是,如果我有列表的默认值,并且希望将列表存储在LocalStorage中,以便在页面加载之间保留它的值,该怎么办呢
const STORAGE_LIST_KEY = 'list';
const LIST_DEFAULT = [
{
id: 1,
name: 'item 1'
},
{
id: 33,
name: 'item 33'
}
];
function initializeList() {
let savedList = localStorage.getItem(STORAGE_LIST_KEY);
return savedList ? savedList : LIST_DEFAULT;
];
Vuex商店体系结构中是否有一些自然的地方,我应该在那里放置
initializeList()
函数?(例如,在Vue组件中,我会将initializeList()
放入组件的方法部分)或者可能存储只是关于结构,初始化代码属于Vue组件?根据异步和副作用的需要,您的初始化状态将是某种突变或动作。在初始化过程中,此操作只能触发一次
然后,将从根实例或足够高级别的组件触发此变异/操作。您还可以将整个应用程序状态的初始化拆分为较小的变化或操作
这种方法的优点是可以拆分Vuex存储并动态加载Vuex模块(延迟加载)
在您的情况下,因为您希望从本地存储中充/放气状态(这是一个副作用),所以执行操作是有意义的。Paitl:我过去认为操作都是关于异步操作的。我的初始化没有任何异步代码,所以我拒绝将其付诸行动。现在我意识到操作可能不止这些。但是我应该在哪里分派初始化操作呢?我在状态代码中看不到这样做的方法。@RobertKusznier,无论是从根实例还是足够高级别的组件。获取它。谢谢