【发布时间】:2021-01-10 23:25:03
【问题描述】:
已经开始玩 Vuex,有点困惑。
每次我加载组件company.vue时它都会触发动作GET_RECRUITERS,因此也会进行api调用。
例如,如果我打开 company.vue => 使用 vue-router 导航到 user/edit.vue,然后他们返回,它将再次调用 action/api(招聘人员根据 Vue-dev-tools 保存在商店中)。
如果我错了,请纠正我 - 如果我再次返回页面,它不应该触发操作/api 并因此重置状态,对吗?还是我误解了 Vuex 的意图?
company.vue
<template>
<card>
<select>
<option v-for="recruiter in recruiters"
:value="recruiter.id">
{{ recruiter.name }}
</option>
</select>
</card>
</template>
<script>
import { mapGetters } from 'vuex'
export default {
middleware: 'auth',
mounted() {
this.$store.dispatch("company/GET_RECRUITERS")
},
computed: mapGetters({
recruiters: 'company/recruiters'
}),
}
</script>
company.js
import axios from 'axios'
// state
export const state = {
recruiters: [],
}
// getters
export const getters = {
recruiters: state => {
return state.recruiters
}
}
// actions
export const actions = {
GET_RECRUITERS(context) {
axios.get("api/recruiters")
.then((response) => {
console.log('API Action GET_RECRUITERS')
context.commit("GET_RECRUITERS", response.data.data)
})
.catch(() => { console.log("Error........") })
}
}
// mutations
export const mutations = {
GET_RECRUITERS(state, data) {
return state.recruiters = data
}
}
谢谢!
【问题讨论】:
-
您在
mounted钩子中有请求,因此每次安装组件时都会调用它。改为在created挂钩中尝试
标签: vue.js vuex vue-router state-management