【发布时间】:2019-05-16 10:54:01
【问题描述】:
您好,我是 Nuxt JS 的新手用户。我正在尝试为我的 Nuxt 项目使用 Vuex 模块模式。
基本上我在我的 VueX 模块中使用 axios。我的代码如下:
store/modules/users.js
import axios from 'axios';
const state = () => ({
users: []
});
// Sets the values of data in states
const mutations = {
setUsers(state, users) {
state.users = users;
}
};
const actions = {
nuxtServerInit(vuexContext, context) {
return axios.get('https://sample-url.com/users')
.then((response) => {
vuexContext.commit('setUsers', response.data.data.results);
})
.catch((err) => {
context.error(err);
});
},
setUsers(vuexContext, users) {
vuexContext.commit('setUsers', users);
}
};
// retrieves the data from the state
const getters = {
getUsers(state) {
return state.users;
}
};
export default {
state,
mutations,
actions,
getters
};
然后我将这个模块包含在 store/index.js
中import Vuex from 'vuex';
import Users from "~/store/modules/users";
const createStore = () => {
return new Vuex.Store({
state: {},
mutations: {},
modules: {
Users
}
})
}
export default createStore;
然后我将用户存储在我的 Vuex 中的一个页面中,例如: pages/index.vue
<script>
export default {
computed: {
loadedUsers() {
return this.$store.getters.getUsers;
}
}
}
</script>
我的问题是:
- 我意识到每当我在其他页面上刷新我不需要用户的页面时,它会再次向我的 api 发送 GET 请求以获取用户。如何仅将模块用于我需要的页面,例如 pages/index.vue
- 如果其他请求(如 GET cmets)应位于 store/modules/cmets.js 下,我该如何使用模块,然后再次将其包含在 store.js 下
【问题讨论】:
标签: javascript vue.js vuex nuxt.js vuex-modules