最新消息:Welcome to the puzzle paradise for programmers! Here, a well-designed puzzle awaits you. From code logic puzzles to algorithmic challenges, each level is closely centered on the programmer's expertise and skills. Whether you're a novice programmer or an experienced tech guru, you'll find your own challenges on this site. In the process of solving puzzles, you can not only exercise your thinking skills, but also deepen your understanding and application of programming knowledge. Come to start this puzzle journey full of wisdom and challenges, with many programmers to compete with each other and show your programming wisdom! Translated with DeepL.com (free version)

javascript - Where should I put state initialization code in Vuex? - Stack Overflow

matteradmin6PV0评论

Should Vuex store keep only the code of state structure and how to modify that state (mutations, actions), or also the actual state initialization and values?

I started wondering about it, when my state initialization code bee more plex, because I don't see any natural place in Vuex architecture to put this code into.

Let's say I have such a store:

export default {
  state: {
    list: []
  },

  mutations: {
    addItem(state, { item }) {
      state.list.push(item);
    }
  }
}

If the list starts empty, it's enough. But what if I have default values for the list and also want to store the list in LocalStorage, so that I can preserve it's value between page loads.

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;
];

Is there some natural place in the Vuex store architecture, where I should put initializeList() function? (e.g. In a Vue ponent I would put initializeList() into methods part of the ponent) Or maybe the store is just about the structure and the initialization code belongs to the Vue ponents?

Should Vuex store keep only the code of state structure and how to modify that state (mutations, actions), or also the actual state initialization and values?

I started wondering about it, when my state initialization code bee more plex, because I don't see any natural place in Vuex architecture to put this code into.

Let's say I have such a store:

export default {
  state: {
    list: []
  },

  mutations: {
    addItem(state, { item }) {
      state.list.push(item);
    }
  }
}

If the list starts empty, it's enough. But what if I have default values for the list and also want to store the list in LocalStorage, so that I can preserve it's value between page loads.

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;
];

Is there some natural place in the Vuex store architecture, where I should put initializeList() function? (e.g. In a Vue ponent I would put initializeList() into methods part of the ponent) Or maybe the store is just about the structure and the initialization code belongs to the Vue ponents?

Share Improve this question edited Jan 12, 2019 at 14:53 Cœur 38.8k25 gold badges206 silver badges279 bronze badges asked Jun 22, 2018 at 10:06 Robert KusznierRobert Kusznier 6,9519 gold badges55 silver badges73 bronze badges
Add a ment  | 

1 Answer 1

Reset to default 6

Your initialization state will be some sort of mutation or action depending upon the needs of async and side effects. This actions should be fired only once during initialization.

This mutation/action will then be triggered from root instance or sufficiently higher level ponent. You can also split the initialization of entire application state into smaller mutations or actions.

The advantage of this approach is you can split your Vuex store and dynamically load Vuex module (lazy loading).

In your case, since you wish to inflate/deflate state from local storage (which is a side effect), it makes sense to make an action.

Post a comment

comment list (0)

  1. No comments so far