Задать вопрос
@alzow

Как показывать уведомления из Vuex?

Разрабатываю небольшое приложение на VueJS в образовательных целях и столкнулся с вопросом, как показывать уведомления пользователю (всплывающие сообщения всякие) при ответе API с сервера.

Код для ясности:

export default new Vuex.Store({
    state,
    getters,
    mutations,
    actions: {
        load_current_user (context, {}) {
            Vue.http.get(`/api/users/me/`).then(response => {
                context.commit('set_current_user', response.body);
            }, response => {
                // Что-то пошло не так. Надо уведомить пользователя об этом. 
           });
    },
    }
})


Что-то мне подсказывает, что показывать уведомления из store - плохая идея, и надо бы возвращать promise, но тогда придется и первый и второй случай обрабатывать из места, откуда action был вызван, что все усложнит.
  • Вопрос задан
  • 556 просмотров
Подписаться 1 Простой Комментировать
Помогут разобраться в теме Все курсы
  • Skypro
    Frontend-разработчик с нуля
    9 месяцев
    Далее
  • Skypro
    JavaScript-разработчик с нуля
    9 месяцев
    Далее
  • Skypro
    React-разработчик с нуля
    9 месяцев
    Далее
Пригласить эксперта
Ответы на вопрос 1
alvvi
@alvvi
export default apathy;
Так вы какие уведомления хотите? На уровне приложения или на уровне одного компонента? Если на уровне приложения, то естественно логика должна быть завязана на store. Если на уровне компонента, возвращайте промис.
Не знаю как vue-resources, с обычными промисами никаких проблем не возникает.

export default new Vuex.Store({
    actions: {
        load_current_user (context, {}) {
           // Помните что .then возвращает именно промис
           return axios.get('/api/users/me/')
             .then(response => {
                context.commit('set_current_user', response.body)
             })
      },
    }
})


// В компоненте
this.$store.dispatch('load_current_user', {}).catch(e => {
  // Что-то пошло не так. Надо уведомить пользователя об этом.
})
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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