Vue3 状态管理之 Pinia 的使用

2023-11-12

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MuxYBwXS-1646496904674)(https://pinia.vuejs.org/logo.svg#pic_center)]

Vue3 新的发展方向(来源于尤大知乎)

  • Vue 3 将在 2022 年 2 月 7 日 成为新的默认版本

  • 基于 Vite 的极速构建工具链

  • <script setup> 带来的开发体验更丝滑的组合式 API 语法

  • Volar 提供的单文件组件 TypeScript IDE 支持

  • vue-tsc 提供的针对单文件组件的命令行类型检查和生成

  • Pinia 提供的更简洁的状态管理

  • 新的开发者工具扩展,同时支持 Vue 2/Vue 3,并且提供一个插件系统来允许社区库自行扩展开发者工具面板。

一、Pinia 简介与基础

1.1 Pinia 简介

  • 官方地址:[这里是代码003]
  • PiniaVuex4 的升级版,也就是 Vuex5
  • Pinia 极大的简化了Vuex的使用,是 Vue3的新的状态管理工具
  • Piniats的支持更好,性能更优, 体积更小,无 mutations,可用于 Vue2Vue3
  • Pinia支持Vue Devtools、 模块热更新和服务端渲染

1.2 Pinia 基础

Vuex 与 Pinia 对比

  • Vuex 中核心部分: StateGettersMutations(同步) 和 Actions(异步)
  • Pinia 中核心部分: StateGettersActions(同步异步均支持)

Pinia 各部分作用

  • State 类似于组件中data,用于存储全局状态
  • Getters 类似于组件中的computed,根据已有的State封装派生数据,也具有缓存的特性
  • Actions 类似于组件中的methods,用于封装业务逻辑,同步异步均可以

Pinia 官方示例JS版本

import { defineStore } from 'pinia'

export const todos = defineStore('todos', {
  state: () => ({
    /** @type {
  { text: string, id: number, isFinished: boolean }[]} */
    todos: [],
    /** @type {'all' | 'finished' | 'unfinished'} */
    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)
    },
    /**
     * @returns {
  { text: string, id: number, isFinished: boolean }[]}
     */
    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 stat 00e
      this.todos.push({ text, id: this.nextId++, isFinished: false })
    },
  },
})

二、Pinia 在Vue3-Vite中的使用

2.1 基础使用流程

  • ① 创建一个vue vite项目

    PS C:UsersFORGETDesktopvue-pinia-demo> npm init vite@latest
    Need to install the following packages:
    create-vite@latest
    Ok to proceed? (y) y
    √ Project name: … pinia-demo
    √ Select a framework: ? vue
    √ Select a variant: ? vue-ts

    Scaffolding project in C:UsersFORGETDesktopvue-pinia-demopinia-demo…

    Done. Now run:

    cd pinia-demo
    npm install
    npm run dev
    PS C:UsersFORGETDesktopvue-pinia-demo> cd .pinia-demo
    PS C:UsersFORGETDesktopvue-pinia-demopinia-demo> npm install

  • ② 安装 pinia-S是为了将其保存至package.json中,便于Git管理给其他人的使用

    PS C:UsersFORGETDesktopvue-pinia-demopinia-demo> npm install pinia -S

    package.json文件中

    “dependencies”: {
    “pinia”: “^2.0.9”,
    “vue”: “^3.2.25”
    },

  • ③ 创建 pinia 实例并挂载到 vue

    // main.ts 文件
    import { createApp } from ‘vue’
    import App from ‘./App.vue’
    import {createPinia} from ‘pinia’
    // 创建 Pinia 实例
    const pinia = createPinia()
    // 创建 Vue 实例
    const app = createApp(App)
    // 挂载到 Vue 根实例
    app.use(pinia)
    ap

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Vue3 状态管理之 Pinia 的使用 的相关文章

  • 解释一下这个令人困惑的 dojo 教程声明语法

    我正在阅读使用的语法道场的声明 http dojotoolkit org documentation tutorials 1 8 declare 用于班级创建 描述很混乱 The declare function is defined in
  • 如何在 Windows 网络中的 Intranet Web 应用程序中获取用户的用户名

    我内部有一个简单的 HTML 页面 它只显示一个表单并要求用户填写 我想自动捕获Windows域用户名和机器名 并将其与表单中收集的数据一起提交 我可以在客户端这样做吗 HTML JavaScript 或者我被迫在服务器端执行此操作 我还不
  • 在动态创建的元素的onclick函数的属性中传递一个字符串

    我试图在动态创建的锚元素的 onClick 事件处理函数的参数中传递一个字符串 请参阅小提琴http jsfiddle net shmdhussain bXYe4 http jsfiddle net shmdhussain bXYe4 我无
  • 是否有任何理由使用 axios 而不是 ES6 fetch [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 研究了 axios 和 ES6 fetch 的文档 我发现两者非常相似 并且都受到 ajax 及其简写的强烈影响 axios 的主要优点是浏览器
  • 仅从功能区打开一个对话框

    我有一个带有登录按钮的功能区 可打开登录对话框 我想将对话框的数量限制为一个 我正在使用函数 displayDialogAsync startAddress options callback https learn microsoft co
  • 为什么Promise中的代码会同步执行? [复制]

    这个问题在这里已经有答案了 在我的项目中 我有一个很长时间运行的操作 所以我决定将其放入Promise因为我认为这样我就可以在里面的代码继续执行其他操作Promise正在跑步 调试的时候发现外面的代码Promise仅当里面的代码执行Prom
  • 为某个时刻添加持续时间 (moment.js)

    时刻版本 2 0 0 阅读文档后 http momentjs com docs manipulating add 我认为这很简单 Chrome 控制台 var timestring1 2013 05 09T00 00 00Z var tim
  • document.write 在同一页面上显示内容。

    我对 javascript document write 方法有疑问 大多数情况下 当我使用 document write 时 它会向我显示在不同页面中使用该方法编写的内容 例如 如果我写这样的命令 document write Hello
  • 在给定索引上将字符串分成两部分并返回两部分

    我有一个字符串 需要在给定索引上拆分 然后返回两个部分 并用逗号分隔 例如 string 8211 8 211 98700 98 700 因此 我需要能够在任何给定索引上拆分字符串 然后返回字符串的两半 内置方法似乎执行分割 但只返回分割的
  • @fontface - 禅宗购物车中的 403 禁止错误

    我不确定这是否是发布此内容的正确位置 因为我不知道问题出在哪里 基本上 字体现在对我来说真的很痛苦 而且没有任何效果 我尝试从 google fonts 加载字体 但遇到了 IE 问题 所以我决定下载它们并自己提供服务 但现在它无法在任何浏
  • 为什么这个递归函数返回未定义?

    我正在尝试编写一个使用递归组合两个字符串的函数 我的代码如下 但我不知道为什么该函数返回未定义 特别是当我在基本情况下使用 console log 时 它不会打印未定义而是打印正确的值 var str3 function merge str
  • 文件缓存:查询字符串与上次修改时间?

    我正在研究缓存网站资源的方法 并注意到大多数与我类似的网站都使用查询字符串来覆盖缓存 例如 css style css v 124942823 后来 我注意到每当我保存 style css 文件时 最后修改的标头都会 更新 使得查询字符串变
  • iPhone 上的锁定方向 UIWebView

    有没有办法锁定 UIWebView 的方向 使用 Obj C JS 还是 Html 我不想有按钮或任何东西 我只想在应用程序打开时将其锁定为纵向 好像这个堆栈溢出帖子 https stackoverflow com questions 43
  • 浮动CSS属性导致父div不继承高度?

    我在 div 中有一个元素设置为float right但是 它会导致最外面的 div 不环绕 这是jsfiddle http jsfiddle net W792X 5 for it 我试图让提交按钮在 div 内浮动 但设置该属性似乎会导致
  • JavaScript setTimeout 和更改系统时间会导致问题

    我注意到如果我设置setTimeout未来1分钟 然后将我的系统时间更改为过去5分钟 setTimeout功能将在 6 分钟后触发 我这样做是因为我想看看夏令时系统时钟更改期间会发生什么 我的 JavaScript 网页使用setTimeo
  • WebpackError:ReferenceError:Gatsby 上未定义窗口

    我已经在互联网上进行了大量搜索 但无法解决这个问题 我正在使用 Gasby 开发静态页面 但遇到此错误 WebpackError ReferenceError window is not defined 我的线索是 这与我正在使用的引导 模
  • 在什么情况下,使用 HTTP/2 单独加载图像会比使用 HTTP/1.1 中的精灵一次加载所有图像慢?

    HTTP 2 使多路复用连接成为可能 从而消除了与服务器的多个连接的需要 通过单个连接 可以将许多单独的图像发送到客户端 这避免了将多个图像组合成一个并使用 CSS 将其分开的旧图像精灵模式 我很好奇精灵在 HTTP 2 世界中是否仍然会更
  • 使用严格模式编译指示时如何声明全局变量

    使用自调用函数来包装严格模式兼容代码 通常称为严格模式编译指示 被认为是一种很好的做法 function use strict Strict code here 我的问题是在这种情况下如何声明全局变量 我今天知道的三种替代方案 替代方案 1
  • Radiobutton-带有纯 html/css 的按钮

    是否可以创建像这样的单选按钮JQuery http jqueryui com demos button radio那些 用纯html css thanks 试试这个小提琴 http jsfiddle net mcXm7 1 http jsf
  • 拉斐尔路径交叉点不起作用

    我对拉斐尔和 pathIntersection method JSFiddle 示例 http jsfiddle net t6gWt 2 您可以看到有两条线都与曲线相交 但当我使用 pathIntersection method 有一个未解

随机推荐

  • LeetCode-312.戳气球、动态规划

    有 n 个气球 编号为0 到 n 1 每个气球上都标有一个数字 这些数字存在数组 nums 中 现在要求你戳破所有的气球 如果你戳破气球 i 就可以获得 nums left nums i nums right 个硬币 这里的 left 和
  • C语言文件包含

    一个C语言程序由若干源程序文件组成 而一个源文件还可以将另一个源文件的全部内容包含进来 即将指定的源文件包含在当前文件中 例如 下有两个源文件file1 c和file2 c file1 c int max int x int y int z
  • 因易用性导致的TongWeb使用误区

    误区一 使用TongWeb企业版本 即按照 TongWeb7企业版用户手册 pdf 手册操作 安装好TongWeb后doc目录下有手册 TongWeb手册的正确观看顺序 1 最先看 TongWeb7快速使用手册 pdf 了解基本的安装 使用
  • 【基于用户的】协同过滤推荐算法(UserCF算法的实现)

    协同过滤算法在推荐算法领域应用十分广泛 主要有基于用户 UserCF 和基于物品 ItemCF 两种不同的类型 基于用户的推荐算法 它是一种发现兴趣相似的用户的算法 假如你正在建设的是一个学习资源共享平台 你的用户群体有着大致稳定的专业与相
  • JAVA烟花原理

    java烟花原理 0 缘由 两天前无聊玩了下蜘蛛纸牌 发现最后胜利时的烟花效果挺漂亮的 琢磨Java能不能弄出来类似的效果 上网搜了一下 整合资料 基本全是抄的 之后自己写了一份 重点讲原理 源码放文末 上一个效果图 1 概述 其实烟花说白
  • Springboot整合Mybatis(注解开发)

    前言 Springboot整合Mybatis实现一个最基本的增删改查功能 整合的方式有两种一种是注解形式的 也就是没有Mapper xml文件 还有一种是XML形式的 我推荐的是使用注解形式 为什么呢 因为更加的简介 减少不必要的错误 1
  • 基于TensorFlow的花卉识别

    概要设计 数据分析 本次设计的主题是花卉识别 数据为TensorFlow的官方数据集flower photos 包括5种花卉 雏菊 蒲公英 玫瑰 向日葵和郁金香 的图片 并有对应类别的标识 daisy dandelion roses sun
  • ChatGPT研究分析:GPT-4做了什么

    前脚刚研究了一轮GPT3 5 OpenAI很快就升级了GPT 4 整体表现有进一步提升 追赶一下潮流 研究研究GPT 4干了啥 本文内容全部源于对OpenAI公开的技术报告的解读 通篇以PR效果为主 实际内容不多 主要强调的工作 是 Pre
  • openwrt: Makefile 框架分析

    本篇的主要目的是想通过分析Makefile 了解openwrt编译过程 着重关注以下几点 openwrt目录结构 主Makefile的解析过程 各子目录的目标生成 kernel编译过程 firmware的生成过程 软件包的编译过程 open
  • sprintf错误以及类型转换

    最近 编写一个程序需要将两个字符串连接起来 我使用了sprintf函数 总是出现错误的结果 后来 把结果打印出来 才发现原来是char指针中有空字符 ASCII码为0的字符 我的错误代码如下 unsigned char szbuffer 1
  • 华为OD机试 - 整理扑克牌(Java)

    题目描述 给定一组数字 表示扑克牌的牌面数字 忽略扑克牌的花色 请按如下规则对这一组扑克牌进行整理 步骤1 对扑克牌进行分组 形成组合牌 规则如下 当牌面数字相同张数大于等于4时 组合牌为 炸弹 3张相同牌面数字 2张相同牌面数字 且3张牌
  • 在VUE中使用keycloak完成用户登录认证

    由于只是测试keycloak的登录 故以下的VUE代码仅供参考 在正式开始前 请先移步官方文档 http www keycloak org docs 笔者的keycloak服务器地址 http 192 168 10 9 8080 auth所
  • MES系统最全介绍来了,企业必看好文,值得收藏备用

    制造业的核心在于生产 随着智能制造的普及 MES系统开始备受制造型企业的青睐 当然 在引进MES系统前 企业管理者们都应该好好了解什么是MES 以及MES的作用有哪些 到底能为生产带来什么好处 制造型企业在生产过程中 或多或少都会遇到以下生
  • iphone上实现1px的border

    最近在做手机网页时 设计师ui review的时候 跟我说我写的边框不对 他要的是1px而我写的是两相素 但是我明明就是写的1px 后面查了一下资料 发现iphone上是可以写小数的 也是说0 5px才是retina屏幕上的真正1px 设计
  • 电磁波频谱 和 波段划分以及名称由来(收集)

    电磁波频谱和波段划分 段号 频段名称 频段范围 含上限 不含下限 波段名称 波长范围 含上限 不含下限 1 极低频 ELF 3 30赫 Hz
  • 关于mybatis逆向工程生成中的小问题解决

    创建mybatis逆向工程时 如果没有报错但是无指定代码文件生成 可以在GeneratorSqlmap java文件中加上以下代码 if warnings isEmpty System out println 成功 else System
  • 2022牛客多校(十)

    2022牛客多校 十 一 比赛小结 比赛链接 蔚来杯 2022牛客暑期多校训练营10 二 题目分析及解法 基础题 F Shannon Switching Game 题目链接 F Shannon Switching Game 题意 给定一个无
  • Gcc 警告: warning: dereferencing type-punned pointer will break strict-aliasing rules

    今天在ubuntu 下编译 busybox 的时候 出现了这个警告 warning dereferencing type punned pointer will break strict aliasing rules 用有道的翻译结果是 警
  • Keil4编辑器OXFD错误解决办法

    keil是德国的 对汉字的兼容不太好 在做液晶显示需要显示带0XFD的汉字如 三 时就不能正常显示 可以通过以下的补丁来修复 补丁文件 keil4编辑器0XFD补丁 其它文档类资源 CSDN下载https download csdn net
  • Vue3 状态管理之 Pinia 的使用

    外链图片转存失败 源站可能有防盗链机制 建议将图片保存下来直接上传 img MuxYBwXS 1646496904674 https pinia vuejs org logo svg pic center Vue3 新的发展方向 来源于尤大