当前位置: 首页 > news >正文

使用全局状态管理(Vuex)实现数据共享​

我在制作网页时遇到一个问题:在多个Vue组件中频繁调用同一个接口/company/info,导致重复请求,想要减少访问次数。

首先,我需要分析问题的根源。在首页、底部组件以及其他页面都调用了这个接口,每次组件加载时都会发起请求,这样确实会造成资源浪费,尤其是在数据不常变化的情况下。

使用Vuex进行状态管理是一个不错的选择。将公司信息存储在全局状态中,各个组件通过状态获取数据,而不是各自发起请求。这需要设置Vuex的store,创建一个模块来管理公司信息的状态、actions和mutations。当应用初始化时,或者在需要的时候,触发一次数据获取,之后所有组件都从store中读取数据,避免重复请求。

下面是实施步骤:

1.安装Vuex(如果尚未安装)

npm install vuex --save

2.创建store模块

在路径src/store/modules新建company.js文件,加入下面代码

// src/store/modules/company.js
const state = {info: null,lastFetch: 0
}const mutations = {SET_COMPANY_INFO: (state, info) => {state.info = infostate.lastFetch = Date.now()}
}const actions = {async fetchCompanyInfo({ commit, state }) {// 1小时内缓存策略if (Date.now() - state.lastFetch > 3600 * 1000 || !state.info) {const res = await request.get('/company/info')commit('SET_COMPANY_INFO', res)}return state.info}
}export default {namespaced: true,state,mutations,actions
}

3.在根store中注册模块

找到store下的index.js,没有的话可以新建

// src/store/index.js
import Vue from 'vue'
import Vuex from 'vuex'
import company from './modules/company'Vue.use(Vuex)export default new Vuex.Store({modules: {company}
})

4.App.vue初始化数据

<script>
export default {created () {this.$store.dispatch('company/fetchCompanyInfo')}
}
</script>

5.在需要的地方引用

有三种使用方法,第一种:使用mapState辅助函数​

import { mapState } from 'vuex'export default {computed: {...mapState('company', ['info'])},mounted() {console.log(this.info) // 直接访问缓存数据}
}

第二种:使用getter实时获取 

export default {computed: {companyInfo() {return this.$store.state.company.info}}
}

第三种:强制刷新数据(需要时使用)​

// 在需要更新缓存时调用
this.$store.dispatch('company/fetchCompanyInfo', { force: true }).then(info => {// 获取最新数据
})

相关文章:

  • “新五强”争锋,基础大模型玩家再洗牌
  • RTSP有两套格式吗?
  • 从数据中台到数据飞轮:实现数据驱动的升级之路
  • 【C++进阶篇】二叉搜索树的实现(赋源码)
  • 量化感知训练与 PyTorch 的哪些事
  • rocketMq实例
  • 高防服务器部署实战:从IP隐匿到协议混淆
  • 可视化+智能补全:用Database Tool重塑数据库工作流
  • 星云智控自定义物联网实时监控模板-为何成为痛点?物联网设备的多样化-优雅草卓伊凡
  • 视频编辑软件无限音频、视频、图文轨
  • 【HarmonyOs鸿蒙】七种传参方式
  • Python 基础语法与数据类型(八) - 函数参数:位置参数、关键字参数、默认参数、可变参数 (*args, **kwargs)
  • 【车辆管理软件】佳易王车辆运行信息管理系统:物流车队车辆管理软件!车辆运行日报报表打印软件程序实操教程 #操作简单 #记录车辆数据软件
  • Linux 下载python3.9
  • 分别在windows和linux上使用curl,有啥区别?
  • 精准预测蛋白质稳定性的强大工具
  • mpegts.js 播放flv视频报错:PIPELINE_ERROR_DECODE: video decode error!
  • 后端系统做国际化改造,生成多语言包
  • texlive 与 Texmaker 安装
  • 【C盘空间不足怎么办】
  • 上海能源科技发展有限公司原董事长李海瑜一审获刑13年
  • 外交部:愿同拉美国家共同维护多边贸易体制
  • 央行最新报告:积极落地5月推出的一揽子金融政策,促进经济供需平衡、物价合理回升
  • “浦东时刻”在京展出:沉浸式体验海派风情
  • 代理销售保险存在误导行为,农业银行重庆市分行相关负责人被罚款0.1万元
  • 高盛上调A股未来12个月目标点位,沪深300指数潜在回报15%