它支持Vue3,同时也支持Vue2,是Vuex的完美过渡替代者
它极致轻量化,只有 1kb 左右大小
它类型安全,支持TypeScript,类型可自动推断,即使在 JavaScript 中亦可为你提供自动补全功能!(划重点)
选项式写法
export const useCounterStore = defineStore('main', {
state: () => ({
count: 0,
}),
getters: {
double() {
return this.count * 2
}
},
actions: {
increment() {
this.count++
}
},
})
组合式写法
import { ref, computed } from 'vue'
export const useCounterStore = defineStore('main', () => {
const count = ref(0)
const double = computed(() => {
return count.value * 2
})
function increment() {
count.value++
}
return { count, double, increment }
})
确实,跟Vue3的两种写法不能说很像,基本是一模一样
由于例子比较简单,所以两种写法看着都挺简洁的,但是既然有两种写法,自然就有了比较,如果是你,你更倾向于哪种写法呢
起初我是使用 options 写法的,不是说我喜欢 optioons 写法,而是因为我用得比较早,那时还不支持 setup 写法,后面 setup 写法出来了我也是第一时间去尝试,由于 Vue3 我是一直在使用 setup 写法,所以我也是比较热衷于这种写法
但是当我慢慢切换到 setup 写法,我发现有几点弊端,或者说用着不爽的地方
准确的说这点不能叫做弊端,它其实就是 hooks 的写法,写习惯了也还好,但就是因为这一点,它就做不到跟 <script setup> </script> 一致的写法,这不能说是弊端,因为完整的 setup 的写法其实就是这样的,只不过是 Vue 对开发者太友好了,提供了 <script setup> </script> 这样的语法糖进一步减少开发者的负担
还记得开头的划重点吗,没错,使用 setup 写法会丢失这一非常重要的特性,还毫无疑问会极大的降低开发效率,这也是我最无法忍受的一点。当然,在 ts 中可以通过类型定义解决代码提示,但这就不是 Pinia 的类型推断了
基于以上几点弊端,我又渐渐的从 setup 写法转回 options 写法了,毕竟 options 写法最大的问题就是当代码量非常多的时候需要上下代码反复横跳查看,有点影响代码阅读和理解,但其实如果注意模块拆分的话时很难出现这种情况的,毕竟一般不会在 store 里面写大量的业务逻辑代码
说了这么多, 难道 setup 没有一点可取之处吗,不,我觉得存在即合理,还是有一定场景用 setup 更合适的
作者:大脸怪
链接:https://juejin.cn/post/7271076750351548457
Pinia 是 Vue.js 的轻量级状态管理库,最近很受欢迎。它使用 Vue 3 中的新反应系统来构建一个直观且完全类型化的状态管理库。
Pinia 是一个用于 Vue 的状态治理库,相似 Vuex, 是 Vue 的另一种状态治理计划。如果你现在使用 vue3 开发项目,那么推荐你使用 Pinia 开发。
Vue3 发布已经有一段时间了,它采用了新的响应式系统,而且构建了一套全新的 Composition API。Vue 的周边生态都在加紧适配这套新的系统,官方的状态管理库 Vuex 也在适配中
如果你之前使用过 vuex 进行状态管理的话,那么 pinia 就是一个类似的插件。它是最新一代的轻量级状态管理插件。按照尤雨溪的说法,vuex 将不再接收新的功能,建议将 Pinia 用于新的项目。
自从我开始使用Vue 3和组合API以来,我也尝试使用 Pinea 作为状态管理库。如果是从是 vue2 和 vuex 过来的,就会觉得用起来差别还是很大的。
Pinia和Vuex一样都是是vue的全局状态管理器。其实Pinia就是Vuex5,只不过为了尊重原作者的贡献就沿用了这个看起来很甜的名字Pinia。本文将通过Vue3的形式对两者的不同实现方式进行对比,让你在以后工作中无论使用到Pinia还是Vuex的时候都能够游刃有余。
在这篇文章中,想与大家分享使用 Pinia 的五大技巧。以下是简要总结:不要创建无用的 getter,在 Option Stores 中使用组合式函数(composables),对于复杂的组合式函数,使用 Setup Stores
内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!