Open j10ccc opened 1 month ago
vuex 注册、声明、消费状态的方式繁琐,并且没有类型提示,开发体验很差。
原逻辑中的 vuex 会将状态全部存到一颗状态树下,持久化后数据全存在 storage 的一个键值对下,对调试状态不友好。
新人上手项目要先熟悉 vuex,心智负担重。
本次改动一方面为了跟上前端技术的步伐,另一方面能降低项目维护成本和新人上手难度。
本次改动是纯前端的技术性改动,计划将 vuex 全部替换成 pinia,将状态管理逻辑提取成 hook。
主要影响三处
src/store
src/service
现版本中,部分代码的业务逻辑(状态管理)和请求函数强耦合(具体见 updateDateStateWithSession 函数),需要做拆分。要想剥离掉 vuex,必须先把状态的维护和请求函数的声明拆开,具体的拆分方案如下
updateDateStateWithSession
services/request.ts
src/hooks
计划以 src/services 下的模块为单位进行重构。下面是执行重构的方案
src/services
request
pinia
defineStore
useStore
service
在体验版过渡两个 minor 版本后,作为 patch 版本上线。先在办公室灰度 2 周,后缓慢放量给用户。
按照 src/services/services 下的模块来分工
src/services/services
@j10ccc
canteenService.ts
libraryService.ts
lostfoundService.ts
systemService.ts
authService.ts
suitService.ts
@xixiIBN5100
yxyService.ts
userService.ts
zfService.ts
方案介绍
背景
vuex 注册、声明、消费状态的方式繁琐,并且没有类型提示,开发体验很差。
原逻辑中的 vuex 会将状态全部存到一颗状态树下,持久化后数据全存在 storage 的一个键值对下,对调试状态不友好。
新人上手项目要先熟悉 vuex,心智负担重。
价值
本次改动一方面为了跟上前端技术的步伐,另一方面能降低项目维护成本和新人上手难度。
目标
本次改动是纯前端的技术性改动,计划将 vuex 全部替换成 pinia,将状态管理逻辑提取成 hook。
影响的模块
主要影响三处
src/store
下src/service
下方案设计
技术方案
现版本中,部分代码的业务逻辑(状态管理)和请求函数强耦合(具体见
updateDateStateWithSession
函数),需要做拆分。要想剥离掉 vuex,必须先把状态的维护和请求函数的声明拆开,具体的拆分方案如下services/request.ts
),本次计划将所有请求逻辑替换成的纯请求函数,仅仅保留请求入参,响应的返回。原调用updateDateStateWithSession
来实现状态更新的逻辑,拆分到 hook 中实现。src/hooks
下创建具体的模块文件夹来实现。计划以
src/services
下的模块为单位进行重构。下面是执行重构的方案src/store
下的模块。request
实现。pinia
复现 store 的 getter/setter 逻辑到 hook,用defineStore
写一个useStore
。service
下的业务逻辑、消费请求函数以及刚刚声明的useStore
到 hook。灰度方案
在体验版过渡两个 minor 版本后,作为 patch 版本上线。先在办公室灰度 2 周,后缓慢放量给用户。