我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Vue中如何使用pinia

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Vue中如何使用pinia

这篇文章主要介绍了Vue中如何使用pinia的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Vue中如何使用pinia文章都会有所收获,下面我们一起来看看吧。

Vue中如何使用pinia

什么是Pinia?

Pinia最初是在 2019 年 11 月左右重新设计使用   Composition API的 Vue Store 外观的实验。从那时起,最初的原则仍然相同,但 Pinia 适用于 Vue 2 和 Vue 3  ,并且不需要你使用组合 API。除了安装SSR之外,两者的 API 都是相同的,并且这些文档针对 Vue 3 ,并在必要时提供有关 Vue 2 的注释,以便 Vue 2 和 Vue 3 用户可以阅读!

为什么要使用 Pinia?

Pinia 是 Vue 的存储库,它允许您跨组件/页面共享状态。ç 这对于单页应用程序来说是正确的,但如果它是服务器端呈现的,则会将您的应用程序暴露给安全漏洞。 但即使在小型单页应用程序中,您也可以从使用 Pinia 中获得很多好处:

  • 开发工具支持

    • 跟踪动作、突变的时间表

    • 商店出现在使用它们的组件中

    • 时间旅行和更容易的调试

  • 热模块更换

    • 在不重新加载页面的情况下修改您的商店

    • 在开发时保持任何现有状态

  • 插件:使用插件扩展 Pinia 功能

  • 为 JS 用户提供适当的 TypeScript 支持或自动完成功能

  • 服务器端渲染支持

基本示例

这就是使用 pinia 在 API 方面的样子(请务必查看入门以获取完整说明)。您首先创建一个商店:

// stores/counter.jsimport { defineStore } from 'pinia'export const useCounterStore = defineStore('counter', {  state: () => {    return { count: 0 }  },  // could also be defined as  // state: () => ({ count: 0 })  actions: {    increment() {      this.count++    },  },})

然后在组件中使用它:

import { useCounterStore } from '@/stores/counter'export default {  setup() {    const counter = useCounterStore()    counter.count++    // with autocompletion ✨    counter.$patch({ count: counter.count + 1 })    // or using an action instead    counter.increment()  },}

你甚至可以使用一个函数(类似于一个组件setup())来为更高级的用例定义一个 Store:

export const useCounterStore = defineStore('counter', () => {  const count = ref(0)  function increment() {    count.value++  }  return { count, increment }})

如果您仍然不熟悉setup()Composition API,请不要担心,Pinia 还支持一组类似的地图助手,例如 Vuex。您以相同的方式定义存储,但随后使用mapStores()mapState()mapActions()

const useCounterStore = defineStore('counter', {  state: () => ({ count: 0 }),  getters: {    double: (state) => state.count * 2,  },  actions: {    increment() {      this.count++    }  }})const useUserStore = defineStore('user', {  // ...})export default {  computed: {    // other computed properties    // ...    // gives access to this.counterStore and this.userStore    ...mapStores(useCounterStore, useUserStore)    // gives read access to this.count and this.double    ...mapState(useCounterStore, ['count', 'double']),  },  methods: {    // gives access to this.increment()    ...mapActions(useCounterStore, ['increment']),  },}

您将在核心概念中找到有关每个地图助手的更多信息。

为什么选择Pinia

Pinia(发音为/piːnjʌ/,如英语中的“peenya”)是最接近piña(西班牙语中的菠萝)的词,它是一个有效的包名称。菠萝实际上是一组单独的花朵,它们结合在一起形成多个水果。与商店类似,每一家都是独立诞生的,但最终都是相互联系的。它也是一种美味的热带水果,原产于南美洲。

一个更现实的例子

这是一个更完整的 API 示例,您将在 Pinia中使用类型,即使在 JavaScript 中也是如此。对于某些人来说,这可能足以在不进一步阅读的情况下开始使用,但我们仍然建议您查看文档的其余部分,甚至跳过此示例并在阅读完所有核心概念后返回。

import { defineStore } from 'pinia'export const todos = defineStore('todos', {  state: () => ({        todos: [],        filter: 'all',    // type will be automatically inferred to number    nextId: 0,  }),  getters: {    finishedTodos(state) {      // autocompletion! ✨      return state.todos.filter((todo) => todo.isFinished)    },    unfinishedTodos(state) {      return state.todos.filter((todo) => !todo.isFinished)    },        filteredTodos(state) {      if (this.filter === 'finished') {        // call other getters with autocompletion ✨        return this.finishedTodos      } else if (this.filter === 'unfinished') {        return this.unfinishedTodos      }      return this.todos    },  },  actions: {    // any amount of arguments, return a promise or not    addTodo(text) {      // you can directly mutate the state      this.todos.push({ text, id: this.nextId++, isFinished: false })    },  },})

与 Vuex 的比较

Pinia 试图尽可能地接近 Vuex 的理念。它旨在测试 Vuex 下一次迭代的提案,并且取得了成功,因为我们目前有一个针对 Vuex 5 的开放 RFC,其 API 与 Pinia 使用的 API 非常相似。请注意,我 (Eduardo),Pinia 的作者,是 Vue.js 核心团队的一员,并积极参与了 Router 和 Vuex 等 API 的设计。我个人对这个项目的意图是重新设计使用全球商店的体验,同时保持 Vue 的平易近人的理念。我保持 Pinia 的 API 与 Vuex 一样接近,因为它不断向前发展,以使人们更容易迁移到 Vuex,甚至在未来融合两个项目(在 Vuex 下)。

RFC

虽然 Vuex 通过 RFC 从社区收集尽可能多的反馈,但 Pinia 没有。我根据我开发应用程序、阅读其他人的代码、为使用 Pinia 的客户工作以及在 Discord 上回答问题的经验来测试想法。这使我能够提供一种适用于各种情况和应用程序大小的有效解决方案。我经常发布并在保持其核心 API 不变的同时使库不断发展。

与 Vuex 3.x/4.x 的比较

Vuex 3.x 是 Vuex 的 Vue 2 而 Vuex 4.x 是 Vue 3

Pinia API 与 Vuex ≤4 有很大不同,即:

  • 突变不再存在。他们经常被认为是非常冗长的。他们最初带来了 devtools 集成,但这不再是问题。

  • 无需创建自定义复杂包装器来支持 TypeScript,所有内容都是类型化的,并且 API 的设计方式尽可能利用 TS 类型推断。

  • 不再需要注入魔法字符串、导入函数、调用它们,享受自动完成功能!

  • 无需动态添加商店,默认情况下它们都是动态的,您甚至都不会注意到。请注意,您仍然可以随时手动使用商店进行注册,但因为它是自动的,您无需担心。

  • 不再有模块的嵌套结构。您仍然可以通过在另一个商店中导入和使用商店来隐式嵌套商店,但 Pinia 通过设计提供平面结构,同时仍然支持商店之间的交叉组合方式。你甚至可以有 store 的循环依赖

  • 没有命名空间的模块。鉴于商店的扁平架构,“命名空间”商店是其定义方式所固有的,您可以说所有商店都是命名空间的。

关于“Vue中如何使用pinia”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“Vue中如何使用pinia”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注编程网行业资讯频道。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Vue中如何使用pinia

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Vue中如何使用pinia

这篇文章主要介绍了Vue中如何使用pinia的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Vue中如何使用pinia文章都会有所收获,下面我们一起来看看吧。什么是Pinia?Pinia最初是在 2019 年 1
2023-06-29

Pinia中action如何使用

这篇文章主要介绍“Pinia中action如何使用”,在日常操作中,相信很多人在Pinia中action如何使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Pinia中action如何使用”的疑惑有所帮助!
2023-07-05

Vue项目中如何用Pinia状态管理工具

这篇文章主要介绍“Vue项目中如何用Pinia状态管理工具”,在日常操作中,相信很多人在Vue项目中如何用Pinia状态管理工具问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Vue项目中如何用Pinia状态管
2023-07-04

Vue使用pinia管理数据pinia持久化存储问题

这篇文章主要介绍了Vue使用pinia管理数据pinia持久化存储问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
2023-03-24

Vue怎么使用pinia管理数据

这篇文章主要讲解了“Vue怎么使用pinia管理数据”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Vue怎么使用pinia管理数据”吧!Vue使用pinia管理数据Vue3 + TS步骤:在
2023-07-05

Vue3中如何引入Pinia存储库并使用

今天小编给大家分享一下Vue3中如何引入Pinia存储库并使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。1.用自己最喜欢
2023-07-06

Vue新的状态管理Pinia怎么使用

今天小编给大家分享一下Vue新的状态管理Pinia怎么使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。为什么有 Vuex
2023-07-06

Vue3状态管理库Pinia如何使用

这篇文章主要介绍“Vue3状态管理库Pinia如何使用”,在日常操作中,相信很多人在Vue3状态管理库Pinia如何使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Vue3状态管理库Pinia如何使用”的疑
2023-07-04

Pinia中action使用方法详解

Pinia是Vue的存储库,它允许您跨组件/页面共享状态,下面这篇文章主要给大家介绍了Pinia中action使用方法的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
2023-05-14

Vue3中使用pinia的示例代码

这篇文章主要介绍了Vue3中使用pinia,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
2022-12-15

Vue状态管理库Pinia和Vuex使用哪个好

今天小编给大家分享一下Vue状态管理库Pinia和Vuex使用哪个好的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。Vuex
2023-07-05

vue中如何使用echarts

这篇文章主要介绍“vue中如何使用echarts”,在日常操作中,相信很多人在vue中如何使用echarts问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”vue中如何使用echarts”的疑惑有所帮助!接下来
2023-07-05

vscode中如何使用vue

近年来,前端开发领域的Vue框架愈发流行,成为了Web开发中不可替代的一部分。而对于前端开发而言,选择一个优秀的代码编辑器是非常重要的。其中,Visual Studio Code (以下简称VS Code)无疑是许多前端开发者们的首选。 那么,如何在VS Code中使用Vue框架呢?本文将向您介绍。第一步:安装VS Code和Vue.js首先,您需要下载和安装VS Code,这
2023-05-14

vue中如何使用socket

这篇“vue中如何使用socket”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“vue中如何使用socket”文章吧。一、W
2023-07-06

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录