vue.js - Vuex 正在重置已设置的状态
问题描述
已经开始玩 Vuex 并且有点困惑。
GET_RECRUITERS
每次我加载组件时它都会触发操作,company.vue
因此也会进行 api 调用。
例如,如果我打开company.vue
=> 导航到user/edit.vue
withvue-router
并且他们返回,它将再次调用 action/api(招聘人员根据 Vue-dev-tools 保存在商店中)。
如果我错了,请纠正我 - 如果我再次返回页面,它不应该触发动作/api,从而重置状态,对吗?还是我误解了 Vuex 的意图?
公司.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>
公司.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
}
}
谢谢!
解决方案
这是预期的行为,因为除非您缓存它,否则每次您路由回它时都会再次创建/安装页面组件。这里有一些设计模式:
将数据加载到只运行一次的App.vue中。
或者,在调用 API 之前检查数据是否尚未加载:
// Testing that your `recruiters` getter has no length before loading data
mounted() {
if(!this.recruiters.length) {
this.$store.dispatch("company/GET_RECRUITERS");
}
}
- 或者,缓存页面组件,以便在您每次离开和返回时都不会重新创建它。通过使用
<keep-alive>
组件包装来做到这一点<router-view>
:
<keep-alive>
<router-view :key="$route.fullPath"></router-view>
</keep-alive>
推荐阅读
- python - 设置 matplotlib 视频动画大小 (1920x1080)
- android - SimpleDateFormat 表示还有 2 个小时
- c++ - 我在视觉工作室中收到错误 LNK1181,我应该如何解决这个问题?
- ios - 使用格式参数时,Swift 中的字符串初始值设定项问题
- python - 展平 numpy 数组并保留索引值
- python - 仅在 Python subprocess.Popen.communicate 中发送标准输入后获取标准输出
- oracle - Oracle 段的范围不相等?
- go - 使用 CView 创建 TUI:网格和使部件不可选择
- docker - 使用代理防火墙构建 docker 映像错误
- reactjs - 如何让 react-datepicker 在星期一开始一周中的几天?