Использование одного действия в двух модулях vuex для разделения логики ведения журнала - PullRequest
1 голос
/ 03 июля 2019

Так что я занимаюсь разработкой приложения nuxt, используя vuex в качестве магазина. Мне пришла в голову идея иметь возможность вести логи (простые запросы API api к бэкэнду laravel), чтобы регистрировать действия пользователя.

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

Это приемлемая практика? Или это недокументированное поведение, которое будет исправлено и удалено?

Быстрая схема происходящего:

store/index.js

import logging from './logging';
import search from './search';

const store = () =>
    new Vuex.Store({
        modules: {
            logging,
            search,
        }
    });

export default store;

store/search.js

const actions = {
    search(state, query) {
        // some search request and processing results
    }
};

const search = {
    state,
    mutations,
    actions,
};

export default search;

store/logging.js

const actions = {
    search(state, query) {
        log(...)
    }
};

const logging = {
    state: {},
    mutations: {},
    actions,
};

export default logging;

1 Ответ

0 голосов
/ 03 июля 2019

Я вижу два способа:

  1. использовать константы
  2. использовать модули с именами

Константы :

создайте файл: constants/store.js

export const LOGGING_SEARCH = 'logging search';
export const SEARCH = 'search';

, затем используйте его, например:

import { LOGGING_SEARCH } from '../constants/store.js'
const actions = {
    [LOGGING_SEARCH](state, query) {
        log(...)
    }
};

const logging = {
    state: {},
    mutations: {},
    actions,
};

export default logging;

и назовите его

import { LOGGING_SEARCH } from '../constants/store.js'
store.dispatch(LOGGING_SEARCH, 'query');

именованные модули doc

store / logging.js

const actions = {
    search(state, query) {
        log(...)
    }
};

const logging = {
    namespased: true,
    state: {},
    mutations: {},
    actions,
};

export default logging;

и назовите его

store.dispatch('logging/search', 'query');

Модули с именами действительно полезны, особенно с хелперы

...