Как лучше имплементировать Middleware для vue 3 + vuex?
Есть приложение vue3+vuex+axios
Очень не хватает возможности писать продвинутую логику для асинхронных actions. Например из saga - TakeLeading, TakeLatest, etc.
В идеале - портирование реактовской react-saga или отдельная библиотека saga для vue. Но все saga-based npm-пакеты которые я встречал - уже как несколько лет(2-5) не cаппортятся.
Поэтому вопроса два:
* Есть ли рабочий свежий аналог saga для vue(в идеале для vue 3)
* Если нет - то как/чем справляются другие пользователи vuex?
Мы тут, в vue, не запихиваем работу с сетью в хранилище. Хранилище - хранит данные. Ну и следит за мутациями.
Работа с сетью ведётся в отдельных сервисах ответственных, собственно, за сеть.
Всякие монстры типа saga вообще не нужны, saga - это решение собственноручно же созданной проблемы.
Ну и если очень хочется: этот ваш редакс же кичится, что он платформо-независимый. Запихни его в vue вместе с сагами как есть, без всяких обёрток, и наслаждайся.
Aetae,
Нигде не написано про работу с сетью. Есть множество других асинхронных операций не связанных с сетью.
И actions - это именно то место, где надо описывать логику/результат асинхронных операций.
Если у вас есть опыт тонкой настройки сложных потоков асинхронных данных в vue - поделитесь пожалуйста.
...с данными.
Не получения, не вычисления, ничего такого прочего. Просто взаимодействия одних данных с другими.
Всё остальное нет смыла рулить руками, можно доверить всё реактивности Vue и в 99% случаев оно просто будет работать "само". Каждый конкретный случай из оставшегося 1% надо разбирать предметно.
Aetae
Да, оно будет работать. Но видимо я слишком туманно/размыто всё объяснил.
Что дано:
Приложение, которое получает большие банчи данных из разных источников:
расширение под Chrome
Broadcast API
Воркеры
3rd party API
собственно само API backend'a.
Взаимодействие между этими источниками настроено на уровне actions в самом приложении(потом с некоторыми правками будет дублироваться в расширении под Chrome)
Всё написано, всё работает.
Но нужна оптимизация - удаление дубликатов данных/экшенов/запросов, кэширование данных/запросов, троттлинг/debounce отдельных запросов.
Именно поэтому и нужен инструмент, который поможет упорядочить весь этот хаос. Saga - всего лишь пример, лишь самая подходящая вещь из моего опыта. И вот тут мне и нужен совет - как другие разработчики vue справляются с такими вещами.
Думаю если не брать ваш проект и не начинать его пилить по тз бессмыслено о чём-то говорить. Но не 100%, может кто-то с мозгом побольше моего что-то предложит сверху.)
Абстрактно могу только сказать, что все эти источники данных на мой взгляд должны жить сами по себе, написанные тем образом - какой наиболее удобен для данного источника. Всё что их объединяет - они кладут в vuex данные в одинаковом оговоренном формате. Vuex также может отвечать за дедупликацию. А вот откуда там что пришло - vuex это волновать не должно.