首页IT科技vue中封装组件(Vue3 封装扩展并简化Vuex在组件中的调用)

vue中封装组件(Vue3 封装扩展并简化Vuex在组件中的调用)

时间2025-06-14 18:41:08分类IT科技浏览4298
导读:如果你在项目中使用了 vuex模块化,并且在项目中使用actions中函数调用频率高,推荐了解一下这种方式。...

如果你在项目中使用了 vuex模块化            ,并且在项目中使用actions中函数调用频率高                     ,推荐了解一下这种方式            。

比如下面两种方式调用       ,

第一个是直接传参设置         ,

第二个是添加了异步ajax返回内容 在回调到等下我们要封装的js中的成功回调里                     ,然后这个成功回调就会反馈给组件

1.创建文件utils/vueTool.js

2.添加开发环境中的模块验证

注意:如果你的vue3项目是使用webpack5创建的 那么这里的自动化导入文件 就不能使用          ,可以去看看我上篇文章中有写webpack5如何自动化导入模块

import { createStore } from vuex import actions from ./actions import mutations from ./mutations import storage from @/utils/storage.js const modulesFiles = import.meta.glob(./modules/*/index.js, { eager: true }); const modules = Object.keys(modulesFiles).reduce( (modules, path) => { const moduleName = path.replace(/^\.\/(.*)\.\w+$/, $1) modules[moduleName.split(/)[1]] = modulesFiles[path]?.default return modules }, {} ); let modulesKey = ; if(process.env.NODE_ENV === development){ let obj = {...actions,...modules}; for(let key in obj){ modulesKey+=key+, }; storage.setItem(modulesKey,modulesKey); }; const store = createStore({ modules, state: { name: allen, modulesKey:storage.getItem(modulesKey) || modulesKey, }, mutations, actions, getters: {} }) export default store

3.页面调用封装

actions函数的调用

import { vuexFunc, getState } from @/utils/vueTool; vuexFunc(子模块文件昵称,actions.js中定义的函数昵称,{ data:{接口需要的参数      ,或者你要设置到仓库的值}, callback(res){ // 请求回调 console.log(res) } }); //模式一(调用全局actions函数) vuexFunc(false,setStageCourse,{ data:query, callback(res){ console.log(res) } }); //模式二(调用子模块函数中的actions函数) vuexFunc(index,setStageCourse,{ data:query, callback(res){ console.log(res) } }); // 模式三(调用完一个actions函数后立即执行另外一个actions函数) 这里调用完成signIn子模块中的loginByCode函数完成回调后                    ,会立即去读取followUp的配置 也是对应了 子模块/signIn函数昵称去执行              ,followUp允许一个具体的函数路径或者一个对象可以配置函数要设置的值 vuexFunc(signIn,loginByCode,{ data:{code:wxcode.value}, followUp:index/getConfig, callback(res){ SignType.value = false storage.setItem(authorization,res.data.token); } });

state仓库的使用

import {vuexFunc,getState} from @/utils/vueTool // 获取全局state let data = getState(全局state对象中定义的对象key) // 获取子模块中的 state // getState(子模块昵称) 获取到某个子模块中的state仓库对象 let data = getState(signIn).SigninType

最后:

这样既扩展了功能 也不需要原本的vuex 先导入 在解构 在调用   ,并且对actions的控制和错误也做到了颗粒化捕获                   ,与拦截反馈                  ,在一定程度上提高了开发过程中的程序调试                     。

后来我又思考了一下感觉还能继续优化,比如像vue2中使用...mapActions 和...mapState 直接返回多个函数对象               ,感觉这样会比较优雅                     ,但是在项目中我已经开发过半了 所以就没有对这个进行重新改造   ,有兴趣的可以试试      。

声明:本站所有文章            ,如无特殊说明或标注                     ,均为本站原创发布         。任何个人或组织      ,在未征得本站同意时         ,禁止复制               、盗用                  、采集      、发布本站内容到任何网站            、书籍等各类媒体平台                     。如若本站内容侵犯了原著者的合法权益                     ,可联系我们进行处理          。

创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!

展开全文READ MORE
Dedecms Biz(DEDECMS点击图片进入下一页功能如何实现) fastjson字段顺序(fastjson全局日期序列化设置导致JSONField无效)