Сброс состояния модуля vuex до некоторого значения initialState - PullRequest
1 голос
/ 04 марта 2020

Я пытаюсь найти метод, который может вернуть состояние модуля обратно к некоторому начальному значению, и до сих пор у меня возникают некоторые концептуальные проблемы.

Мой базовый склад выглядит следующим образом:

const store = new Vuex.Store({
  modules: {
    moduleA: moduleA,
  },
  actions: {
    resetAllState: ({ dispatch }) => {"moduleA");
    },
    resetModuleState: (currentModule) => {
      // Perform the reset here...somehow?
    }
  }
});

Хранилище moduleA.js создается следующим образом с intialState:

const initialState = () => ({
   helloWorld: {}  
});

const moduleA = {
  namespaced: true,
  state: {
    initialState: initialState(),
    ...initialState(),
  }
};

export default moduleA;

Поэтому я использую оператор спреда для создания следующего:

const moduleA = {
  namespaced: true,
  state: {
    initialState: initialState(),
    helloWord: {}
  }
};

Затем я могу мутировать state.helloWorld, сохраняя при этом копию state.initialState ...

Итак, мой вопрос сейчас в следующем глобальном хранилище

    resetModuleState: (currentModule) => {
      // Perform the reset here...somehow?
    }

action Как мне на самом деле выполнить сброс?

Я пробовал это как глобальный способ сброса состояния:

resetAllState: function() {
      let defaultState = {};
      Object.keys(store.state).forEach((key) => {
        defaultState = {
          ...defaultState,
          [key]: store.state[key].initialState ? store.state[key].initialState : store.state[key],
        };
      });
      store.replaceState(Object.assign({}, defaultState));
    },

Но не повезло ...?

1 Ответ

0 голосов
/ 04 марта 2020

Приведенный выше код имеет проблему, действия могут иметь доступ только к

{ commit, dispatch, getters } as params

. В приведенном выше коде «resetModuleState» принимает modueleName в первом параметре, но у него будет объект, поэтому он имеет прямой доступ к Подход к объекту модуля осуществляется ниже и сбрасывает стату, просто вызывая функцию initialState () для каждого имеющегося у вас модуля

, используйте этот код внутри действия "resetAllState"

resetAllState: function({ dispatch }) {
    this._modules.root.forEachChild((childModule) => {
      childModule.state.initialState();
    });
},
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...