Задать вопрос
Alexanevsky
@Alexanevsky
Любительская web-разработка

Почему рекомендуют использовать Vuex как прослойку для работы с API (через axios)?

Во всех уроках по Vue делают запросы к API внутри actions Vuex store, коммитят данные в state и их уже берут в компоненте.

Никак не могу понять, в чём смысл такой прослойки и почему никто не обращается к API минуя Vuex.

При использовании данного рекоендуемого во всех уроках подхода, никто не объясняет, что делать с этими данными, когда я произвожу добавление/обновление новых данных.

Допустим, у меня есть блог. В блоге есть: список статей (с пагинацией), "последние добавленные", "самые популярные" и что-нибудь ещё. А ещё есть страница публикации.
Получается, мне нужно плодить стейты, геттеры, сеттеры и мутации для каждого вида списка, для страницы публикации тоже.

А что делать с этими данными во всех стейтах, когда я отредактировал какую-то публикацию?
А что делать, когда я вообще ухожу с блога на другой раздел сайта? Чистить стейты или оставить висеть в памяти?

Вопросы выше - скорее риторические. А фактический - далее.

Действительно ли есть какой-то смысл в использовании Vuex как прослойки для работы с внешним API (как на чтение, так и запись) или его использование таким образом гайдах/уроках/туториалах избыточно, и стоит использовать по более общему назначению, например хранению состояния авторизации?

К слову, нигде в официальной документации я не нашёл рекомендаций использовать его как API-прослойку, а вот в уроках - только такой подход и используется (как русские, так английские).
  • Вопрос задан
  • 517 просмотров
Подписаться 4 Простой 2 комментария
Пригласить эксперта
Ответы на вопрос 3
firedragon
@firedragon
Не джун-мидл-сеньор, а трус-балбес-бывалый.
Vuex используется как хранилище. Компоненты как его потребители.
Это позволяет разделить приложение на слои и не смешивать логику и отображение и упрощает тестирование.
И типичный пример.
У вас есть 3 компонента на 1 уровне посты, паджинатор и фильтр

причем паджинатор и фильтр дублируются. То есть вместо простого отображения вам нужна и логика и оповещения контрола высшего уровня. Кошмар!
Ответ написан
@TheAthlete
Perl 5, C, C++, компьютерные сети
Когда следует использовать Vuex?
Flux-библиотеки похожи на очки: вы будете точно знать, когда они вам понадобятся.


Если не понимаете, зачем vuex вам нужен - пока не используйте)
Ответ написан
Комментировать
Vadiok
@Vadiok
Веб разработчик
Не знаю, зачем так делают, но предположу, чтобы иметь относительно одинаковый вариант получения данных, независимо от компонентов. Если с сервера запрашиваются данные об авторизированном пользователе или еще что-то, что не подразумевает изменения в зависимости от параметров запроса, то наверное логично делать это через экшны стора. Но вот списки, которые подразумевают фильтрацию и пагинацию вообще только проблемы создают. Например, компонент берет список из стора и отображает его. Потом мне понадобилось в попапе те же сущности вывести, но с другой фильтрацией - все - список первого компонента затерся вторым. Так что с такой практикой надо очень аккуратно.
У нас на работе изначально пошли по пути данных в сторе, потом это выпилили.
Еще минус в том, что данные с сервера в сторе реактивные, хотя для данных, полученных с сервера это обычно не требуется и влияет негативно на производительность. В случае использования composition api такие данные лучше хранить в shallowRef сущности и обновлять ее целиком при получении новых.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы