我想在getter函数内调度动作。
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!');
})
})
},
};
答案 0 :(得分:1)
不,您不能。至少不是您想要的方式。使用模块而不是rootState
时,getter中的第三个参数是dispatch
对象。即使您找到了一种在getter中分派动作的方法,也无法按您期望的方式工作。 Getter必须是同步的,但动作可以是异步的(在此示例中是异步的)。在您的示例中,将分派GET_BOOKS
,但是getter仍将state.books
返回为空。
我建议在Vuex存储之外处理这种延迟加载。