Pinia 是 Vue.js 的轻量级状态管理库,最近很受欢迎。它使用 Vue 3 中的新反应系统来构建一个直观且完全类型化的状态管理库。
Pinia的成功可以归功于其管理存储数据的独特功能(可扩展性、存储模块组织、状态变化分组、多存储创建等)。
另一方面,Vuex也是为Vue框架建立的一个流行的状态管理库,它也是Vue核心团队推荐的状态管理库。Vuex高度关注应用程序的可扩展性、开发人员的工效和信心。它基于与Redux相同的流量架构。
在这篇文章中,我们将对Pinia和Vuex进行比较。我们将分析这两个框架的设置、社区优势和性能。我们还将看一下Vuex 5与Pinea 2相比的新变化。
Pinia 很容易上手,因为它只需要安装和创建一个store。
要安装 Pinia,您可以在终端中运行以下命令:
yarn add pinia@next
# or with npm
npm install pinia@next
该版本与Vue 3兼容,如果你正在寻找与Vue 2.x兼容的版本,请查看v1分支。
Pinia是一个围绕Vue 3 Composition API的封装器。因此,你不必把它作为一个插件来初始化,除非你需要Vue devtools支持、SSR支持和webpack代码分割的情况:
//app.js
import { createPinia } from'pinia'
app.use(createPinia())
在上面的片段中,你将Pinia添加到Vue.js项目中,这样你就可以在你的代码中使用Pinia的全局对象。
为了创建一个store,你用一个包含创建一个基本store所需的states、actions和getters的对象来调用 defineStore
方法。
// stores/todo.js
import { defineStore } from'pinia'
exportconst useTodoStore = defineStore({
id: 'todo',
state: () => ({ count: 0, title: "Cook noodles", done:false })
})
Vuex 也很容易设置,需要安装和创建store。
要安装Vuex,您可以在终端中执行以下命令:
npm install vuex@next --save
# or with yarn
yarn add vuex@next --save
要创建store,你可以使用包含创建基本store所需的states、actions和 getter 的对象调用 createStore
方法:
//store.js
import {createStore} from'vuex'
const useStore = createStore({
state: {
todos: [
{ id: 1, title: '...', done: true }
]
},
getters: {
doneTodos (state) {
return state.todos.filter(todo => todo.done)
}
}
})
要访问 Vuex 全局对象,需要在 Vue.js 项目根文件中添加 Vuex,如下所示:
//index.js
import { createApp } from'vue'
import App from'./App.vue'
import {useStore} from'./store'
createApp(App).use(store).mount('#app')
使用 Pinia,可以按如下方式访问该store:
exportdefault defineComponent({
setup() {
const todo = useTodoStore()
return {
// 只允许访问特定的state
state: computed(() => todo.title),
}
},
})
请注意,在访问其属性时省略了 store 的 state
对象。
使用Vuex,可以按如下方式访问store:
import { computed } from'vue'
exportdefault {
setup () {
const store = useStore()
return {
// 访问计算函数中的状态
count: computed(() => store.state.count),
// 访问计算函数中的getter
double: computed(() => store.getters.double)
}
}
}
在撰写本文时,Pinia 的社区很小,这导致 Stack Overflow 上的贡献很少,解决方案也很少。
由于 Pinia 于去年年初开始流行,并且目前取得了进展,因此其社区正在快速增长。希望很快会有更多的贡献者和解决方案出现在 Pinia 上。
Vuex 是 Vue.js 核心团队推荐的状态管理库,拥有庞大的社区,核心团队成员做出了重大贡献。Stack Overflow 上很容易找到 Vuex 错误的解决方案。
这两个状态管理库都相当容易学习,因为它们在 YouTube 和第三方博客上都有很好的文档和学习资源。对于以前有使用 Redux、MobX、Recoil 等 Flux 架构库经验的开发人员来说,他们的学习曲线更容易。
这两个库的文档都很棒,并且以对经验丰富的开发人员和新开发人员都友好的方式编写。
在撰写本文时,Pania 有两个主要版本:v1 和 v2,其中 v2 在 GitHub 上拥有超过 1.6k 星。鉴于它最初于 2019 年发布并且相对较新,它无疑是 Vue.js 生态系统中增长最快的状态管理库之一。
同时,从 Vuex 创建之日到现在,Vuex 库已经发布了五个稳定版本。尽管 v5 处于实验阶段,但 Vuex 的 v4 是迄今为止最稳定的版本,在 GitHub 上拥有大约 26.3k 星。
Pinia和Vuex都非常快,在某些情况下,使用Pinia的web应用程序会比使用Vuex更快。这种性能的提升可以归因于Pinia的极轻的重量,Pinia体积约1KB。
尽管Pinia是在Vue devtools的支持下建立的,但由于Vue devtools没有暴露出必要的API,所以一些功能如时间旅行和编辑仍然不被支持。当开发速度和调试对你的项目来说更重要时,这是值得注意的。
Pinia 将这些与 Vuex 3 和 4 进行了比较:
这些是Pinia在其状态管理库和Vuex之间的比较中提出的额外见解:
$patch
在devtools的时间轴上对修改进行分组。this.$patch((state) => { state.posts.push(post) state.user.postsCount++}).catch(error){ this.errors.push(error)}
将 Pinia 2(目前处于 alpha 阶段)与 Vuex 进行比较,我们可以推断出 Pinia 领先于 Vuex 4。
Vue.js核心团队为Vuex 5制定了一个开放的RFC,类似于Pinia使用的RFC。目前,Vuex通过RFC来尽可能多地收集社区的反馈。希望Vuex 5的稳定版本能够超越Pinea 2。
据同时也是 Vue.js 核心团队成员并积极参与 Vuex 设计的 Pinia 的创建者(Eduardo San Martin Morote)所说,Pania 和 Vuex 的相似之处多于不同之处:
Pinia试图尽可能地接近Vuex的理念。它的设计是为了测试Vuex的下一次迭代的建议,它是成功的,因为我们目前有一个开放的RFC,用于Vuex 5,其API与Pinea使用的非常相似。我对这个项目的个人意图是重新设计使用全局Store的体验,同时保持Vue的平易近人的理念。我保持Pinea的API与Vuex一样接近,因为它不断向前发展,使人们很容易迁移到Vuex,甚至在未来融合两个项目(在Vuex下)。
尽管 Pinia 足以取代 Vuex,但取代 Vuex 并不是它的目标,因此 Vuex 仍然是 Vue.js 应用程序的推荐状态管理库。
Vuex的优点
Vuex的缺点
Pinia的优点
dispatch
方法或 MapAction
辅助函数,这在 Vuex 中很常见Pinia的缺点
根据我的个人经验,由于Pinea是轻量级的,体积很小,它适合于中小型应用。它也适用于低复杂度的Vue.js项目,因为一些调试功能,如时间旅行和编辑仍然不被支持。
将 Vuex 用于中小型 Vue.js 项目是过度的,因为它重量级的,对性能降低有很大影响。因此,Vuex 适用于大规模、高复杂度的 Vue.js 项目。
本文由哈喽比特于2年以前收录,如有侵权请联系我们。
文章来源:https://mp.weixin.qq.com/s/ZBleOvxWThd-SuFKcIqpdA
京东创始人刘强东和其妻子章泽天最近成为了互联网舆论关注的焦点。有关他们“移民美国”和在美国购买豪宅的传言在互联网上广泛传播。然而,京东官方通过微博发言人发布的消息澄清了这些传言,称这些言论纯属虚假信息和蓄意捏造。
日前,据博主“@超能数码君老周”爆料,国内三大运营商中国移动、中国电信和中国联通预计将集体采购百万台规模的华为Mate60系列手机。
据报道,荷兰半导体设备公司ASML正看到美国对华遏制政策的负面影响。阿斯麦(ASML)CEO彼得·温宁克在一档电视节目中分享了他对中国大陆问题以及该公司面临的出口管制和保护主义的看法。彼得曾在多个场合表达了他对出口管制以及中荷经济关系的担忧。
今年早些时候,抖音悄然上线了一款名为“青桃”的 App,Slogan 为“看见你的热爱”,根据应用介绍可知,“青桃”是一个属于年轻人的兴趣知识视频平台,由抖音官方出品的中长视频关联版本,整体风格有些类似B站。
日前,威马汽车首席数据官梅松林转发了一份“世界各国地区拥车率排行榜”,同时,他发文表示:中国汽车普及率低于非洲国家尼日利亚,每百户家庭仅17户有车。意大利世界排名第一,每十户中九户有车。
近日,一项新的研究发现,维生素 C 和 E 等抗氧化剂会激活一种机制,刺激癌症肿瘤中新血管的生长,帮助它们生长和扩散。
据媒体援引消息人士报道,苹果公司正在测试使用3D打印技术来生产其智能手表的钢质底盘。消息传出后,3D系统一度大涨超10%,不过截至周三收盘,该股涨幅回落至2%以内。
9月2日,坐拥千万粉丝的网红主播“秀才”账号被封禁,在社交媒体平台上引发热议。平台相关负责人表示,“秀才”账号违反平台相关规定,已封禁。据知情人士透露,秀才近期被举报存在违法行为,这可能是他被封禁的部分原因。据悉,“秀才”年龄39岁,是安徽省亳州市蒙城县人,抖音网红,粉丝数量超1200万。他曾被称为“中老年...
9月3日消息,亚马逊的一些股东,包括持有该公司股票的一家养老基金,日前对亚马逊、其创始人贝索斯和其董事会提起诉讼,指控他们在为 Project Kuiper 卫星星座项目购买发射服务时“违反了信义义务”。
据消息,为推广自家应用,苹果现推出了一个名为“Apps by Apple”的网站,展示了苹果为旗下产品(如 iPhone、iPad、Apple Watch、Mac 和 Apple TV)开发的各种应用程序。
特斯拉本周在美国大幅下调Model S和X售价,引发了该公司一些最坚定支持者的不满。知名特斯拉多头、未来基金(Future Fund)管理合伙人加里·布莱克发帖称,降价是一种“短期麻醉剂”,会让潜在客户等待进一步降价。
据外媒9月2日报道,荷兰半导体设备制造商阿斯麦称,尽管荷兰政府颁布的半导体设备出口管制新规9月正式生效,但该公司已获得在2023年底以前向中国运送受限制芯片制造机器的许可。
近日,根据美国证券交易委员会的文件显示,苹果卫星服务提供商 Globalstar 近期向马斯克旗下的 SpaceX 支付 6400 万美元(约 4.65 亿元人民币)。用于在 2023-2025 年期间,发射卫星,进一步扩展苹果 iPhone 系列的 SOS 卫星服务。
据报道,马斯克旗下社交平台𝕏(推特)日前调整了隐私政策,允许 𝕏 使用用户发布的信息来训练其人工智能(AI)模型。新的隐私政策将于 9 月 29 日生效。新政策规定,𝕏可能会使用所收集到的平台信息和公开可用的信息,来帮助训练 𝕏 的机器学习或人工智能模型。
9月2日,荣耀CEO赵明在采访中谈及华为手机回归时表示,替老同事们高兴,觉得手机行业,由于华为的回归,让竞争充满了更多的可能性和更多的魅力,对行业来说也是件好事。
《自然》30日发表的一篇论文报道了一个名为Swift的人工智能(AI)系统,该系统驾驶无人机的能力可在真实世界中一对一冠军赛里战胜人类对手。
近日,非营利组织纽约真菌学会(NYMS)发出警告,表示亚马逊为代表的电商平台上,充斥着各种AI生成的蘑菇觅食科普书籍,其中存在诸多错误。
社交媒体平台𝕏(原推特)新隐私政策提到:“在您同意的情况下,我们可能出于安全、安保和身份识别目的收集和使用您的生物识别信息。”
2023年德国柏林消费电子展上,各大企业都带来了最新的理念和产品,而高端化、本土化的中国产品正在不断吸引欧洲等国际市场的目光。
罗永浩日前在直播中吐槽苹果即将推出的 iPhone 新品,具体内容为:“以我对我‘子公司’的了解,我认为 iPhone 15 跟 iPhone 14 不会有什么区别的,除了序(列)号变了,这个‘不要脸’的东西,这个‘臭厨子’。