Могу ли я отправить действие vuex в функцию получения? - PullRequest
0 голосов
/ 17 февраля 2019

Я хочу отправить действие внутри функции получения.
1. Возможно ли это и правильно.
2. Если да, то как я могу это сделать?

Я думаю, это будет что-то вроде этой отправки ('GET_BOOKS');

const getters = {
    getAllBooksDispatch: (state, getters, dispatch) => {
        if (state.books === null) {
            dispatch('GET_BOOKS');
        }
        return state.books
    },
};

Но это не работает.
Итак, файл моего магазина выглядит следующим образом.

const initialState = {
    books: null
};

const getters = {
    getAllBooksDispatch: (state, getters, dispatch) => {
        if (state.books === null) {
            dispatch('GET_BOOKS');
        }
        return state.books
    },
};

const mutations = {
    SET_BOOKS: (state,{data}) => {
        console.log('SET_BOOKS mutations')
        state.books = data;
    },
};

const actions = {
    GET_BOOKS: async ({ commit }) => {
        let token = users.getters.getToken;

        let query = new Promise((resolve, reject) => {
            axios.get(config.api + 'books', {token}).then(({data}) => {
                if (data) {
                    commit('SET_BOOKS', {data: data})
                    resolve()
                } else {
                    reject(data.message);
                }
            }).catch(() => {
                reject('Error sending request to server!');
            })
        })

    },
};

1 Ответ

0 голосов
/ 17 февраля 2019

Нет, вы не можете.По крайней мере, не так, как вы хотите.Третий аргумент в получателе - это объект rootState при использовании модулей, а не dispatch.Даже если вы найдете способ отправить действие в геттер, оно не будет работать так, как вы ожидаете.Получатели должны быть синхронными, но действия могут быть (и в этом примере) асинхронными.В вашем примере GET_BOOKS будет отправлено, но получатель все равно вернет state.books как ноль.

Я бы рекомендовал обрабатывать этот тип отложенной загрузки вне хранилища Vuex.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...