Внедрить зависимость в модуль Vuex - PullRequest
0 голосов
/ 24 февраля 2020

Возможно, у кого-то была похожая ситуация, и она может помочь с этим:

Очень упрощенный c просмотр:

  • У меня есть модуль Vuex, который я использую с двумя разными store
  • Этот модуль использует функцию «нормализатора», которая отображает данные из API в формат, используемый компонентами, использующими данные
  • Компоненты в двух хранилищах нуждаются в данных в несколько разных форматы
  • Моя текущая идея состоит в том, чтобы иметь две разные функции «нормализатора», которые имеют один и тот же «интерфейс», но дают немного разные результаты, и «внедрить» их в качестве зависимости в модуль перед подключением его к хранилищу:

Существующий код - «фиксированная» функция нормализатора (простой старый модуль Vuex):

// module.js
import { normalize } from './utils';

const actions = {
    getData({ commit }) {
        MyApi.getData().then((data) => {
            commit('setData', data.map(normalize));
        });
    },
};

// ...
export default {
    actions,
    // ...
}
// my-store.js
import MyModule from './my-module';

export default new Vuex.Store({
    modules: {
        'my-module': MyModule,
    },
    // ...
});

Новый код, который может принимать различные функции:

// module.js

export default (inject) => {
    const { normalize } = inject;

    const actions = {
        getData({ commit }) {
            MyApi.getData().then((data) => {
                commit('setData', data.map(normalize));
            });
        },
    };
    //...
    return {
        actions,
        // ...
    };
}
// store-type-1.js
import getMyModule from './my-module';
import normalizerType1 from './normalizer-type-1';

export default new Vuex.Store({
    modules: {
        'my-module': getMyModule({ normalize: normalizerType1 }),
    },
    // ...
})

Дело в том, что в этой реализации что-то напоминает больной большой палец, и я почти уверен, что есть более разумные способы сделать это, я Я просто недостаточно умен, чтобы думать о них.

Я могу предоставить более подробную информацию о том, что должна делать эта функция "нормализатора", возможно, я лаю не на том дереве.

Какой отраслевой стандарт для такого рода вещей?

Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...