vue2+webpack升级vue3+vite,在vue3组合式编程中使用vuex

同学们可以私信我加入学习群!


@TOC


场景

我的项目是从vue2+webpack升级为vue3+vite,这种升级工作,其实最重要的不是如何快速准确地把原有vue2项目全部重构为vue3项目,因为这是不现实的。

升级工作一定是一个长久的持续过程,所以如何保证旧的vue2项目与新的vue3模块之间互相兼容,才是重中之重。

在原项目中,很多基础信息,如人员信息、组织信息等,都是利用全局状态管理工具保存到内存中,vue2中搭配的工具是vuex,而在重构过程中,我引入了新的状态管理工具pinia。

如果把管理基础信息的vuex完全替换,成本太高,影响范围也太大,风险很大。所以现阶段,还是vuex和pinia共存的状态。

本文主要解决,当添加新的模块时,基于vue3编写组合式代码,如何便捷地使用vuex保存的变量。


一、从vue2到vue3组合式编程

从vue2到vue3组合式编程,有一个小思维习惯要改变。

vue2中,把所有的工具、变量、函数等等都保存到vue实例(this)中,这样做有一个好处,就是调用起来很方便,任何地方只要this.变量,就可以实现相应的功能。有一个坏处就是,this相对于其他人来说,是个黑盒。

一个对项目完全陌生的的程序员,接手项目代码,如果项目规模特别大,那么this里的值就很多很乱,梳理代码、定位bug等都会增加很多阻碍。

而vue3组合式编程中,虽然没有明确说不要使用全局变量this,但是我个人观点,应该要规范引入与输出。让每一个组件或者每一个模块,都更清晰,不管是读代码,还是解耦模块,都会更方便。(读与写的比例,大概是10:1)。

所以在vue3组合式编程中,使用vuex时,就不建议再去使用this.store.xxx的方式,虽然vue3中也可以通过函数定义全局变量。

二、vue3中调用vuex

vuex是提供了api调用项目中的状态管理实例的。这也是很好理解的,毕竟不管是什么工具,js能实现状态管理的方式无非也就是实例化对象或者闭包函数,vuex和pinia应该是通过实例化对象(猜的,没看过源码,对象操作更方便)。所以它们提供个函数获取实例化后的对象,是很容易的事情。

pinia就不多说了,官网推荐的就是通过函数api调用对象。vuex中也提供了类似的方法:

c 复制代码
import {useStore} from 'vuex'
const store = useStore()
const orgList=computed(()=>{
  return store.state.org.orgList
})

这就是一个很简单的例子,获取全局状态state中保存的变量。

需要注意的是,调用orgList时,应该是orgList.value,如下:

c 复制代码
let ml = _.cloneDeep(orgList.value)

在上面代码中,useStore就是vuex提供的获取实例对象方法,store就是实例化后的对象,对象里保存着所有需要全局管理的对象,可以在任意页面随意调用。


总结

大家有什么问题可以私信博主。原创不易,多多关注,多多点赞,拜谢!

相关推荐
你挚爱的强哥2 小时前
✅✅✅【Vue.js】sd.js基于jQuery Ajax最新原生完整版for凯哥API版本
javascript·vue.js·jquery
y先森3 小时前
CSS3中的伸缩盒模型(弹性盒子、弹性布局)之伸缩容器、伸缩项目、主轴方向、主轴换行方式、复合属性flex-flow
前端·css·css3
前端Hardy3 小时前
纯HTML&CSS实现3D旋转地球
前端·javascript·css·3d·html
susu10830189113 小时前
vue3中父div设置display flex,2个子div重叠
前端·javascript·vue.js
IT女孩儿4 小时前
CSS查缺补漏(补充上一条)
前端·css
吃杠碰小鸡5 小时前
commitlint校验git提交信息
前端
天天进步20155 小时前
Vue+Springboot用Websocket实现协同编辑
vue.js·spring boot·websocket
虾球xz5 小时前
游戏引擎学习第20天
前端·学习·游戏引擎
我爱李星璇5 小时前
HTML常用表格与标签
前端·html
疯狂的沙粒5 小时前
如何在Vue项目中应用TypeScript?应该注意那些点?
前端·vue.js·typescript