Pinia读音:['piːnə],是 Vue 官方团队推荐代替Vuex的一款轻量级状态管理库。 它最初的设计理念是让 Vue Store 拥有一款 Composition API 方式的状态管理库,并同时能支持 Vue2.x 版本的 Option API 和 Vue3 版本的 setup Composition API 开发模式,并完整兼容 Typescript 写法(这也是优于 Vuex 的重要因素之一),适用于所有的 vue 项目。
比起 Vuex,Pinia 具备以下优点:
上述的 Pinia 轻量有一部分体现在它的代码分割机制中。
举个例子:某项目有 3 个 store「user、job、pay」,另外有 2 个路由页面「首页、个人中心页」,首页用到 job store,个人中心页用到了 user store,分别用 Pinia 和 Vuex 对其状态管理。
先看 Vuex 的代码分割:
打包时,vuex 会把 3 个 store 合并打包,当首页用到 Vuex 时,这个包会引入到首页一起打包,最后输出 1 个 js chunk。这样的问题是,其实首页只需要其中 1 个 store,但其他 2 个无关的 store 也被打包进来,造成资源浪费。
Pinia 的代码分割:
打包时,Pinia 会检查引用依赖,当首页用到 job store,打包只会把用到的 store 和页面合并输出 1 个 js chunk,其他 2 个 store 不耦合在其中。Pinia 能做到这点,是因为它的设计就是 store 分离的,解决了项目的耦合问题。
事不宜迟,直接开始使用Pinia「本文默认使用 Vue3 的 setup Composition API 开发模式」。
假如你对 Pinia 使用熟悉,可以略过这 part👻