запросы к API надо делать внутри actions Vuex (якобы это best practices). Однако, я совершенно не понимаю, всегда ли это необходимо
state нужен в тех случаях, когда доступ к списку пользователей вам нужен не в одном компоненте, а как минимум в двух. В таких случаях без него никак.
Если вы уверены, что список пользователей вам нужен только в одном компоненте — тогда все данные нужно хранить именно в нем.
Важно понимать разницу:
- Данные в Vuex "существуют" всегда и всегда занимают часть памяти на клиенте.
- Данные в компоненте "существуют" только когда существует компонент. И будут удалены если удалится компонент.
Если ваше приложение завязано на списке пользователей, и несколько компонентов используют эти данные, то без Vuex вам будет сложно.
В то же время, если список пользователей вам нужен только для какого-то виджета, который отображается не всегда — тогда хранить данные в Vuex не стоит.
См. такжеПодскажите, что делать дальше, после того как запрос ушел на сервер и мы получили ответ, что пользователь добавлен?
Это вопрос уже совершенно другого направления.
Создать и вызвать мутацию addUser для добавления нового пользователя в state?
Да. Actions для того и существует, чтобы вы могли выполнить какие-то асинхронные запросы, доп проверки, валидацию данных, определить нужно ли что-то сохранить в state и если нужно — что именно. Здесь вы можете добавить пользователя, проверить добавился ли он, выполнить дополнительный запрос на извлечение информации о нем. И тп.
А мутация — непосредственно алгоритм изменения состояния.
в чем тогда смысл нашего state?
Локальная, быстрая, реактивная копия данных с сервера на клиенте.
при любом действии все равно необходимо загружать данные с сервера
Это уже вопрос к серверу. И к его API. Есть много разных технологий синхронизации данных между сервером и клиентом.
На самом деле я не вижу ничего плохого в том, чтобы после добавления нового пользователя выполнить обращение и загрузить новый актуальный список.