@100R

Как получить state в action?

Насколько допустимо прямо в экшене обращаться к state.page и там же увеличивает значения на 1? Возможно лучше сделать это через мутацию по аналогу с setProducts()? Правда от обращения напрямую никуда не деться. Я могу сделать через мутацию только увеличение значения на 1, верно?

// state
const state = {
    page: 1,
    all: []
}

// getters
const getters = {}

// actions
const actions = {
    getProducts ({ commit }, $state) {
        axios.get('/api/products', {
            params: {
              page: state.page,
            },
        }).then(({ data }) => {
            if (data.data.length) {
                commit('setProducts', data.data)
                state.page += 1
                $state.loaded();
            } else {
                $state.complete();
            }
        });
    }
}

// mutations
const mutations = {
    setProducts (state, products) {
        state.all.push(...products)
    }
}

export default {
    namespaced: true,
    state,
    getters,
    actions,
    mutations
}
  • Вопрос задан
  • 649 просмотров
Решения вопроса 1
Читать напрямую из состояния можно, писать – только через мутации. Кроме того, брать текущее состояние нужно из контекста (1 аргумент), а не объекта, который передается в конструктор:

const actions = {
  getProducts({ commit, state, rootState }) {
    if (state.page) doStuff() // чтение
    commit('SET_PAGE', 2) // запись
  }
}
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@andreysuha
Что то знаю
Изменяет значение стейта только в мутации, получать его можете где угодно
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы