Javascript 我应该在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);

Vuex store应该只保留状态代码结构以及如何修改该状态(突变、动作),还是保留实际的状态初始化和值

当我的状态初始化代码变得更加复杂时,我开始对此感到疑惑,因为我在Vuex体系结构中看不到任何可以将此代码放入的自然位置

假设我有这样一家商店:

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,无论是从根实例还是足够高级别的组件。获取它。谢谢