addStoreRelations
Функция позволяет накрутить хайтек в Vuex store
такой, какой не снилось.
В проекте были встречены проблемы синхронизации actions
и mutations
между store
модулями.
Так же был всякий ненужный бойлерплейт, как например подтягивание данных с сервера в created
хуке компонента, регистрирующего store
модуль.
В результате явилась миру эта функция.
arguments
Функция принимает как аргумент объект следующего вида:
//, где
moduleName
- имяstore
модуля, к которому подвяжутся зависимостиinitDispatch
- имяaction
, который запустится после создания экземпляра компонента, к которому привязанstore
модуль. Сюда чаще всего идут запросы к серверу, по подтягиванию данных для таблиц и тд и тпrequiredRelations
-state
, который обязательно должен существовать, прежде чем запуститсяinitDispatch
и все остальное, в случае, если этотstate
, по какой-либо причине не будет существовать,initDispatch
дождется его появления, прежде чем запустится. Пока что это все сделано только дляcurrentClubId
, но если понадобится для чего-то ещё, то можно дописатьwatchRelations
- триггеры, после которых нужно запустить функцию, переданную сюда в качестве аргументаdispatchFunc
watchActions
-actions
, после (или до) которых нужно запускатьdispatchFunc
, переданную сюда в качестве аргумента
Пример
Пример использования в модуле "Герои и группы":
addStoreRelations
Пример триггера на дефолтном триггере для currentClubId
:
В этом примере после создания основного компонента "Герои и группы", к которому привязан store
, будет запущен action
getOptions
,
который подтягивает все необходимые данные с сервера, НО, getOptions
дождется, пока currentClubId
придет с сервера в state
,
а уже потом подтянет все, что нужно.
После создания нового героя запустится action
getOptions
для обновления данных в таблице и тд.
И после смены клуба currentClubId
администратором также запустится action
getOptions
, для обновления всех
необходимых данных для нового клуба.
В итоге получилась понятный переиспользуемый метод для подобных вещей.