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

如何实现 Vuex 中的 Store 插件

目录

一、Vuex 插件的原理

二、如何注册插件

三、实现一个日志插件

四、实现一个状态持久化插件

五、订阅 Actions

六、总结


在使用 Vuex 进行状态管理时,除了 statemutationsactionsgetters 这些核心功能外,Vuex 还提供了 插件机制,让我们能够扩展 Store 的能力。通过插件,我们可以在 Store 的每次 mutation 之后进行一些副作用操作,比如:

  • 将状态持久化到 localStorage/sessionStorage

  • 记录调试日志;

  • 做接口请求的统一处理;

  • 或者实现一些自定义的全局功能。

本文将带你理解 Vuex 插件的原理,并手把手实现一个简单的插件。


一、Vuex 插件的原理

Vuex 的插件本质上就是一个函数,它接收 store 实例 作为唯一参数,然后在函数内部对 Store 做一些扩展或监听。

官方定义:

const myPlugin = (store) => {// 插件逻辑写在这里
}

这个函数会在 store 初始化时被调用,我们可以在里面:

  1. 使用 store.subscribe 订阅每次的 mutation

  2. 使用 store.subscribeAction 订阅每次的 action

  3. store 上挂载一些自定义的方法。


二、如何注册插件

在创建 Store 时,我们可以通过 plugins 选项来注册一个或多个插件:

import Vue from 'vue'
import Vuex from 'vuex'Vue.use(Vuex)const myPlugin = (store) => {console.log('插件已初始化!')
}export default new Vuex.Store({state: { count: 0 },mutations: {increment(state) {state.count++}},plugins: [myPlugin] // 注册插件
})

这样 myPlugin 就会在 Store 初始化时自动执行。


三、实现一个日志插件

我们先来实现一个最常见的插件 —— 日志打印插件,记录每次 mutation 的触发情况:

const loggerPlugin = (store) => {store.subscribe((mutation, state) => {console.log('mutation 类型:', mutation.type)console.log('mutation 载荷:', mutation.payload)console.log('变化后的 state:', state)})
}

当我们调用:

store.commit('increment')

控制台会输出:

mutation 类型: increment
mutation 载荷: undefined
变化后的 state: { count: 1 }

四、实现一个状态持久化插件

实际开发中,我们经常希望 刷新页面后 Vuex 状态依然存在,这时可以用插件把 state 存到 localStorage

const persistPlugin = (store) => {// 初始化时,从本地缓存恢复状态const savedState = JSON.parse(localStorage.getItem('vuexState'))if (savedState) {store.replaceState(savedState)}// 每次 mutation 后,保存新的 statestore.subscribe((mutation, state) => {localStorage.setItem('vuexState', JSON.stringify(state))})
}
注册后,Vuex 的状态就能持久化到本地。

五、订阅 Actions

除了订阅 mutation,我们也可以订阅 action 的执行情况:

const actionLogger = (store) => {store.subscribeAction({before: (action, state) => {console.log('即将触发 action:', action.type)},after: (action, state) => {console.log('已完成 action:', action.type)}})
}

这对于调试异步请求非常有用。


六、总结

Vuex 插件机制为我们提供了一种优雅的方式,去扩展 Store 的功能。核心要点是:

  1. 插件就是一个函数,接收 store 作为参数;

  2. 可以通过 store.subscribe 监听 mutation;

  3. 可以通过 store.subscribeAction 监听 action;

  4. 可以结合本地存储、日志系统等,实现强大的功能。

常见的插件应用场景:

  • 状态持久化(保存到 localStorage/sessionStorage);

  • 日志调试

  • 埋点/数据上报

  • 权限拦截

  • 跨标签页同步

掌握了 Vuex 插件,你的项目会更加灵活可控!


文章转载自:

http://dqifuP4b.jphxt.cn
http://W0rFBH4l.jphxt.cn
http://3NH69DXa.jphxt.cn
http://1bwGdBFW.jphxt.cn
http://ZVzjTDAT.jphxt.cn
http://cEn4mU21.jphxt.cn
http://83Rp94ky.jphxt.cn
http://VTVMuLlE.jphxt.cn
http://HD7G54Lh.jphxt.cn
http://ZlqOP7Dx.jphxt.cn
http://twFGMPnb.jphxt.cn
http://PdJSRgmJ.jphxt.cn
http://4BZ3klwJ.jphxt.cn
http://zav92nLM.jphxt.cn
http://sPApEeLn.jphxt.cn
http://D92QYFjR.jphxt.cn
http://gJs9IbuV.jphxt.cn
http://AO9bCcin.jphxt.cn
http://SSeQc4tl.jphxt.cn
http://ZvpRuP9D.jphxt.cn
http://9VjApgfG.jphxt.cn
http://tIc901MC.jphxt.cn
http://6RSbH8A3.jphxt.cn
http://PVpdal3I.jphxt.cn
http://XyiJ8Y1v.jphxt.cn
http://yUHPog7V.jphxt.cn
http://Dj9P5cV0.jphxt.cn
http://h3ZgAQh1.jphxt.cn
http://gnNf0u2V.jphxt.cn
http://HADXWeFx.jphxt.cn
http://www.dtcms.com/a/375131.html

相关文章:

  • 少儿舞蹈小程序(11)作品与活动展示
  • crew AI笔记[6] - tools特性示例
  • 英一2009年真题学习笔记
  • 【mq】rabbit-mq学习笔记
  • 《数据库系统概论》第一章 初识数据库
  • 如何在Ubuntu 22.04系统上安装CUDA 12.9
  • 深入剖析LLM:从原理到应用与挑战
  • JavaWeb解决中文乱码问题
  • 控制台Connection closed by 198.18.0.3 port 22
  • AI视觉算法中的OpenCV API
  • 前后端分离架构中,Node.js的底层实现原理与线程池饥饿问题解析
  • Qt QML实现无边框窗口
  • 实战:HarmonyOS 中 HEIF 图像开发全流程(显示篇)
  • 经济学+机器学习+R语言:十大原理、熵权法、随机森林、神经网络、因果推断全解析
  • FPGA硬件设计-基础流程
  • 对expat库XML_Parse函数调用优化的测试
  • 构建未来:深度学习、嵌入式与安卓开发的融合创新之路
  • 第1节-PostgreSQL入门-什么是PostgreSQL
  • odoo18委外采购
  • 【AIGC】一文详解针对大模型推理的动态显存管理技术
  • 达梦数据库应用开发_监控工具DEM_邮件接口实现_yxy
  • 【Spring Boot 报错已解决】彻底解决 “Main method not found in class com.xxx.Application” 报错
  • 计算机视觉之多模板匹配
  • 【Agent】DeerFlow Researcher:系统架构与执行流程(基于真实 Trace 深度解析)
  • leetcode 49 字母异位词分组
  • AI大模型“退烧”后:企业如何抓住落地应用的真价值?
  • 用计算思维“破解”复杂Excel考勤表的自动化之旅
  • 模块与包的导入
  • Gartner发布2025年零信任技术成熟度曲线:实施零信任战略的相关26项关键新兴和成熟技术发展及应用趋势
  • CAD绘图:杂项