@Kitaro2

Как сбрасывать модули в дефолтное состояние?

5c0d09f704cc7092446635.jpeg
Использую laravel + vuex структурой на картинке выше. Все отрабатывает так как надо, и теперь встал вопрос о состоянии всех модулей, т.к. оно не обнуляется при роутинге, а я любитель вызывать нужные компоненты в другом компоненте, чтобы не бегать по роутам, да и в будущем это необходимо. В случае успеха я обнуляю сразу состояние, но если будет ошибка, то ее нужно вывести (например машина с таким гос.номером уже существует) и ошибка остается в состоянии, ошибки нужно всегда чистить через вызов мутации... Поэтому подумал, почему бы при роутинге не вызывать defaultstate, чтобы информация например об ошибках в состоянии зачищалась. Но знаний не хватает. И где лучше его вызывать, я думаю в routes.js при переходах вызывать постоянно defaultstate, но кажется это не очень хорошая идея, может есть лучше?...
Для примера мой модуль cars:

/cars/index:

import state from './state';
import * as getters from './getters';
import * as mutations from './mutations';
import * as actions from './actions';

export default {
  namespaced: true,
  state,
  getters,
  mutations,
  actions
}

/cars/state:

export default {
  cars: [],
  car: {},
 snackbar: {
    timeout:4000,
    color:null,
    show: false,
    text:null,
  },
  form: {
    name: null,
    vin: null,
    mark: null,
    model: null,
    fuel: null,
    type: null,
    tarif: null,
    department_id: null
  },
  errors: {}
}

/store/index

import Vue from 'vue';
import Vuex from 'vuex';

Vue.use( Vuex );

import state from './state.js';
import * as getters from './getters.js';
import * as mutations from './mutations.js';
import * as actions from './actions.js';

import upl from './modules/uploads/';
import dep from './modules/departments/';
import car from './modules/cars/';

export default new Vuex.Store({
    namespaced: true,
    state,
    getters,
    mutations,
    actions,
    modules: {
       dep, upl, car
    }
  });

В действиях и мутациях, думаю, ничего интересного нет, т.к. там проблем нет.
  • Вопрос задан
  • 646 просмотров
Решения вопроса 1
kulakoff
@kulakoff Куратор тега Vue.js
Vue.js developing
Просто объявите функцию, которая будет возвращать дефолтный стейт для модуля. И сделайте мутацию, в которой стейту будет устанавливаться дефолтное состояние через вызов этой функции. А вот когда вызывать эту мутацию: в хуках компонента или в хуках роутера или когда-то еще будет уже зависеть от ваших потребностей и логики приложения.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы