013:vue3 Pinia详解使用详解

news2024/11/20 14:33:02

文章目录

  • 1. Pinia 是什么
  • 2. Pinia 功能作用
  • 3. 手动添加Pinia到Vue项目
  • 4. Pinia基础使用
  • 5. getters实现
  • 6. action异步实现
  • 7. storeToRefs工具函数
  • 8. Pinia的调试
  • 9. 总结

在这里插入图片描述

1. Pinia 是什么

  1. Pinia 是 Vue 的专属的 最新状态管理库
  2. Vuex 状态管理工具的替代品和 Vuex 一样为 Vue 项目提供共享状态管理工具
  3. 并且支持vue2和vue3,主要是为vue3提供状态管理,支持typescript
  4. Pinia可以创建多个全局仓库,不用像 Vuex 一个仓库嵌套模块,结构复杂。管
    理数据简单,提供数据和修改数据的逻辑即可,不像Vuex需要记忆太多的API

2. Pinia 功能作用

  1. 提供更加简单的API (去掉了 mutation )
  2. 提供符合组合式风格的API (和 Vue3 新语法统一)
  3. 去掉了 modules 的概念,每一个 store 都是一个独立的模块
  4. 配合 TypeScript 更加友好,提供可靠的类型推断

3. 手动添加Pinia到Vue项目

Pinia可以在项目创建时自动添加,现在我们初次学习,从零开始: 2.1 使用 Vite 创建一个空的TS + Vue3项目

npm create vite@latest vue-pinia-ts -- --template vue-ts

按照官方文档安装 pinia 到项目中

cnpm i pinia

4. Pinia基础使用

  1. 在 src 中定义一个 stores 文件夹,新建 counter.ts 文件
  2. counter.ts 组件使用 store
import { defineStore } from 'pinia'
import { ref } from 'vue'
export const useCounterStore = defineStore('counter', () => {
    // 数据(state)
    const count = ref(0)
    // 修改数据的方法(action)
    const increment = () => {
        count.value++
    }
    // 已对象的形式返回
    return {
        count,
        increment
    }
})
  1. main.js 中引入 pinia
...
import { createApp } from 'vue'
import App from './App.vue'
import { createPinia } from 'pinia'
const pinia = createPinia();
createApp(App).use(pinia).mount('#app')
  1. App.vue 页面中使用
<script setup>
// 1. 导入 useCounterStore 方法
import { useCounterStore } from './stores/counter'
// 2. 执行方法得到counterStore对象
const counterStore = useCounterStore();
</script>
<template>
  <div>{{counterStore.count}}</div>
</template>

5. getters实现

  1. Pinia中的 getters 直接使用 computed 函数 进行模拟, 组件中需要使用需要把 getters return出去
const doubleCount = computed(() => count.value * 2)

6. action异步实现

方式:异步action 函数的写法和组件中获取异步数据的写法完全一致

const getList = async ()=>{
    const res = await axios.request<接口数据类型>({})
}

7. storeToRefs工具函数

使用 storeToRefs 函数可以辅助保持数据(state + getter)的响应式解构

<script setup>
import { storeToRefs } from 'pinia'
import { useCounterStore } from './stores/counter'
// 使用storeToRefs保持数据响应式
const { count } = storeToRefs(useCounterStore());

function add() {
  counterStore.increment()
}
</script>
<template>
	<p class="mt-4">
      number:<strong class="text-green-500"> {{ count }} </strong>
    </p>

    <button class="btn" @click="add">
      Add
    </button>
</template>

8. Pinia的调试

Vue官方的 dev-tools 调试工具 对 Pinia直接支持,可以直接进行调试
在这里插入图片描述

9. 总结

  1. 通过 const useCounterStore = defineStore('counter', () => {}) 创建数据仓库
  2. vuex 中的 state 在 pinia 中可以引用 refreactive 创建响应式数据
  3. vuex 中的 getters 在 pinia 中可以引用 computed 创建计算属性
  4. vuex 中的 mutationsactions 在 pinia 中就是普通函数, 同步异步都可以

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1593835.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ESP-IDF移植lvgl 驱动 ST7789

文章目录 1 前言2 准备3 移植LVGL3.1 工程准备3.2 修改 CMakeLists.txt文件编译 LVGL3.3 编译LVGL 4 编译 ST7789 LCD驱动5 发现问题 1 前言 本教程开始学习 LVGL的&#xff0c;开始之前要把环境配置好&#xff0c;首先就需要移植 lvgl&#xff0c;使用的是 esp32 环境&#xf…

计算机网络——ARP协议

前言 本博客是博主用于复习计算机网络的博客&#xff0c;如果疏忽出现错误&#xff0c;还望各位指正。 这篇博客是在B站掌芝士zzs这个UP主的视频的总结&#xff0c;讲的非常好。 可以先去看一篇视频&#xff0c;再来参考这篇笔记&#xff08;或者说直接偷走&#xff09;。 …

Javaweb监听器(Listener)

一、概念 1.Listener表示监听器。是Javaweb三大组件&#xff08;Servlet、Filter、Listener&#xff09;之一 2.优先级为监听器>过滤器>servlet 3.监听器可以监听就是在application&#xff0c;session&#xff0c;request三个对象创建、销毁或者往其中添加修改删除属性…

MySQ数据库: MySQL数据库的安装配置 ,图文步骤详细,一篇即可完成安装完成! MySQL数据库如何与客户端连接

LiuJinTao&#xff1a; 2024年4月14日 文章目录 MySQL的安装配置1. 下载2. 安装 三、 MySQL 启动与停止1. 第一种 方式&#xff1a;2. 第二种方式&#xff1a; 四、MySQL 客户端连接2. 方式二&#xff1a; MySQL的安装配置 1. 下载 官方下载网址&#xff1a;https://www.mysq…

2024蓝桥杯省赛C++软件算法研究生组题解+游记

A题 给你一个音游的游戏记录log.txt&#xff0c;判断玩家的最高连击数 题解 水题&#xff0c;但是要小心&#xff0c;miss的键需要重置k0&#xff0c;超时但正确的键重置k1 个人答案是9 B题 计算1~2024041331404202中有多少个数x满足x! - x*(x1)/2能被100整除 题解 首先…

数字乡村创新实践探索农业现代化与乡村振兴新路径:科技赋能农村全面振兴与农民幸福新篇章

随着信息技术的飞速发展&#xff0c;数字乡村成为推动农业现代化与乡村振兴的重要战略举措。科技赋能下的数字乡村创新实践&#xff0c;不仅提升了农业生产的智能化水平&#xff0c;也为乡村治理和农民生活带来了翻天覆地的变化。本文旨在探讨数字乡村创新实践在农业现代化与乡…

【vue】Vue3开发中常用的VSCode插件

Vue - Official&#xff1a;vue的语法特性&#xff0c;如代码高亮&#xff0c;自动补全等 Vue VSCode Snippets&#xff1a;自定义一些代码片段 v3单文件组件vdata数据vmethod方法 别名路径跳转 参考 https://www.bilibili.com/video/BV1nV411Q7RX

Java+vue2+springboot智慧班牌系统源码,支持PC端、移动客户端、电子班牌端,SaaS模式部署

智慧班牌作为一个班级的标识&#xff0c;也是班级空间日常管理的载体&#xff0c;作为班级文化展示交流窗口与学科教学、德育管理&#xff0c;以及学校信息収布等有机结合起来&#xff0c;作为学生展示的平台&#xff0c;又可应用于普及教育安全知识和科学文化&#xff0c;拓展…

JVM复习

冯诺依曼模型与计算机处理数据过程相关联&#xff1a; 冯诺依曼模型&#xff1a; 输入/输出设备存储器输出设备运算器控制器处理过程&#xff1a; 提取阶段&#xff1a;输入设备传入原始数据&#xff0c;存储到存储器解码阶段&#xff1a;由CPU的指令集架构ISA将数值解…

斯坦福DeepMindGoogle提出SAFE:大模型长篇事实检验新标杆

关注公众号【AI论文解读】回复或者发送&#xff1a;论文解读 获取本文论文PDF 引言&#xff1a;大型语言模型的长篇事实性挑战 在当今信息爆炸的时代&#xff0c;大型语言模型&#xff08;LLMs&#xff09;在处理开放式话题的事实性问题时&#xff0c;常常会产生包含事实错…

【进阶六】Python实现SDVRPTW常见求解算法——自适应大邻域算法(ALNS)

基于python语言&#xff0c;采用经典自适应大邻域算法&#xff08;ALNS&#xff09;对 带硬时间窗的需求拆分车辆路径规划问题&#xff08;SDVRPTW&#xff09; 进行求解。 目录 往期优质资源1. 适用场景2. 代码调整2.1 需求拆分2.2 需求拆分后的服务时长取值问题 3. 求解结果4…

基本的数据类型在16位、32位和64位机上所占的字节大小

1、目前常用的机器都是32位和64位的&#xff0c;但是有时候会考虑16位机。总结一下在三种位数下常用的数据类型所占的字节大小。 数据类型16位(byte)32位(byte)64位(byte)取值范围char111-128 ~ 127unsigned char1110 ~ 255short int / short222-32768~32767unsigned short222…

gitlab:Could not resolve host

fatal: unable to access http://xxx.git/: Could not resolve host: yyy Git-fatal: unable to access ‘https://gitlab.XX.git/‘: Could not resolve host: gitlab.XX.com.cn_drone unable to access .git/: could-CSDN博客 原因&#xff1a; 克隆的时候使用的是这里的HTT…

mysql题目5

tj11&#xff1a; select max(c.teacher_age) 最大的年龄 from tb_teacher c tj12: select a.class_name 班级名称,b.student_name 学生姓名,b.gender 学生性别 from tb_class a join tb_student b on a.class_idb.class_id join tb_teacher c on a.teacher_idc.teacher_id w…

复旦新出!大规模语言模型:从理论到实践,书籍PDF分享

自2018年以来&#xff0c;包含Google、OpenAI、Meta、百度、华为等公司和研究机构都纷纷发布了包括BERT&#xff0c; GPT等在内多种模型&#xff0c;并在几乎所有自然语言处理任务中都表现出色。 今天给大家推荐一本大模型方面的书籍<大规模语言模型&#xff1a;从理论到实…

Python学习笔记20 - 模块

什么叫模块 自定义模块 Python中的包 Python中常用的内置模块 第三方模块的安装与使用

虚拟机安装及拉取阿里云镜像

虚拟机安装及拉取阿里云镜像 1: 2: 3: 4: 5: 6: 7:这里设置为处理器核数的一半 8: 9: 10: 11: 12: 13: 14: 15: 16: 选好 光盘镜像文件后;点击关闭 按钮;然后选择完成 17: 18: 19: 20: 开始漫长的等待… 21: 点击完成配置,然后开始等待 22: 23: 24: 然后点击右下角的 完成配…

sc2024完善pay8001项目

1. 时间格式 package com.hong.entity;import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.v3.oas.annotations.media.Schema;import java.math.BigDecimal; import java.util.Date; import javax.persistence.*;/*** 表名&#xff1a;t_pay* 表注释&…

分享一个预测模型web APP的功能模块和界面的设计

一个临床预测模型web APP功能模块与界面设计 随着医疗技术的不断进步&#xff0c;web APP是临床预测模型在医学领域的应用的重要形式。这里分享一个web APP的设计&#xff0c;手里有医学预测模型的可以尝试将其构建成webAPP&#xff0c;进而在临床实践中体验预测模型带来的便利…

Vitis HLS 学习笔记--优化循环启动间隔(II)

目录 1. 概述 2. 常规矩阵乘法 3. 数据依赖性和内存访问模式 4. 优化循环 5. 总结 1. 概述 Initiation Interval&#xff08;II&#xff09;定义为启动连续操作之间的时间间隔&#xff0c;以时钟周期为单位。低的II是高性能和高资源利用率的关键。 较高的II意味着在单位…