Pinia理解【Vue3】

news2024/12/24 9:33:51

什么是Pinia

Pinia是Vue的专属的最新状态管理库,是Vuex状态管理工具的替代品

优势:

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

添加Pinia到Vue项目

  1. 使用 create-vue 创建空的新项目 npm init vue@latest
  2. 按照官方文档安装pinia到项目

在这里插入图片描述
main.js

import './assets/main.css'

import { createApp } from 'vue'
import App from './App.vue'

// 1.导入createPinia
import { createPinia } from 'pinia'

// 2.执行方法得到实例
const pinia = createPinia()
 
// 3.把pinia实例加入到app应用中

createApp(App).use(pinia).mount('#app')

使用Pinia实现计数器案例

App.vue

<script setup>
  // 1.导入 use 打头的方法
  import {useCounterStore} from '@/stores/counter'
  // 2.执行方法得到store实例对象
  const counterStore = useCounterStore()
  console.log(counterStore);
</script>

<template>
  <button @click="counterStore.increment">{{ counterStore.count }}</button>
</template>

<style scoped>
header {
  line-height: 1.5;
}

.logo {
  display: block;
  margin: 0 auto 2rem;
}

@media (min-width: 1024px) {
  header {
    display: flex;
    place-items: center;
    padding-right: calc(var(--section-gap) / 2);
  }

  .logo {
    margin: 0 2rem 0 0;
  }

  header .wrapper {
    display: flex;
    place-items: flex-start;
    flex-wrap: wrap;
  }
}
</style>

counter.js

// 导入一个方法 defineStore
import {defineStore} from 'pinia'
import {ref} from 'vue'

export const useCounterStore = defineStore('counter', ()=>{
    //定义数据(state)
    const count = ref(0)
    // 定义修改数据的方法(action 同步+异步)
    const increment = ()=>{
        count.value++
    }

    // 以对象的方式return供组件使用
    return {
        count,
        increment
    }
})

getters实现

Pinia中的 getters 直接使用 computed函数 进行模拟

//定义数据(state)
    const count = ref(0)
// getter定义
    const doubleCount = computed(() => count.value * 2)

action如何实现异步

action中实现异步和组件中定义数据和方法的风格完全一致

 // 定义异步action
    const list = ref([])
    const getList = async ()=>{
        const res = await axios.get(API_URL)
        list.value = res.data.data.channels
    }

storeToRefs

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

//响应式丢失 视图不再更新
const {count, doubleCount} = counterStore
// 保持数据响应式
const {count, doubleCount} = storeToRefs(counterStore)

总结:

  1. Pinia是用来做什么的?
    集中状态管理工具,新一代的vuex
  2. Pinia中还需要mutation吗?
    不需要,action既支持同步也支持异步
  3. Pinia如何实现getter?
    computed计算属性函数
  4. Pinia产生的Store如何解构赋值数据保持响应式?
    storeToRefs

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

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

相关文章

RabbitMQ Exchange类型和工作模式介绍

RabbitMQ Exchange类型和工作模式介绍 一RabbitMQ Exchange类型1.1.Fanout1.2.Direct1.3.Topic1.4.Headers 二 RabbitMQ 工作模式介绍2.1.work工作模式(资源的竞争)2.2.publish/subscribe发布订阅(共享资源)2.3.routing路由模式应用--direct交换器 2.4.topic 主题模式(路由模式…

一键轻松造数据:通过Postman实现表单提交

一、原始需求的诞生 在测试的过程中&#xff0c;需要大量的表单。于是我选择了通过postman发送表单提交的接口来造数据。 如上图所示&#xff0c;表单提交接口所需的参数以及请求体中需模拟的IP地址。参数为 {{}} 的表示需要不同的实参&#xff0c;至于原因就不在这里赘述了。如…

618手机大战:各大品牌花式秀战报,但难掩冷淡行情

在手机出货量持续下行的态势下&#xff0c;各大手机厂商普遍对618这个年中大促寄予厚望&#xff0c;希望通过各种促销手段&#xff0c;扭转销售颓势。 比如&#xff0c;今年5月下旬&#xff0c;小米、荣耀、OPPO、vivo等厂商就已经开启了降价、分期免息等优惠活动&#xff0c;…

Vue3自定义指令实现按钮权限

一、需求前提 登录成功后&#xff0c;后端直接返回了用户的所有权限&#xff08;路由权限按钮权限&#xff09;&#xff0c;在已经实现菜单权限的基础上&#xff0c;实现每个页面的按钮权限&#xff0c;树形数据结构如下&#xff1a; { "roles": ["admin&q…

嵌入式实时操作系统的设计与开发New(六)

aCoral的优先级与数字大小成反比&#xff0c;即&#xff1a;数字越大&#xff0c;优先级越低。 #define MAX_PRIO_NUM ((CFG_MAX_THREAD1) & 0xff) #define MINI_PRIO CFG_MAX_THREAD //最低优先级40typedef enum{ACORAL_INIT_PRIO; //init线程独有的0优先级ACORAL_MAX_PR…

如何刷新 DNS 缓存 (macOS, Linux, Windows)

如何刷新 DNS 缓存 (macOS, Linux, Windows) Unix Linux Windows 如何刷新 DNS 缓存 (macOS, FreeBSD, RHEL, CentOS, Debian, Ubuntu, Windows) 请访问原文链接&#xff1a;https://sysin.org/blog/how-to-flush-dns-cache/&#xff0c;查看最新版。原创作品&#xff0c;转载…

论文解读|基于平面双关节机器人的相机姿态分析与评估

原创 | 文 BFT机器人 01 研究内容 论文的主要研究内容是基于平面双关节机器人的相机姿态分析和评估。研究旨在分析相机的位置调整和一般数据分析&#xff0c;讨论人体姿势的平衡、关节运动的控制以及相机速率的估计和控制。 通过有限相机技术的应用&#xff0c;有效解决平面摄影…

【虚拟机数据恢复】XenServer虚拟机磁盘数据被破坏的数据恢复案例

虚拟机数据恢复环境&#xff1a; 一台某品牌720服务器&#xff0c;4块STAT硬盘通过RAID卡组建raid10磁盘阵列。部署的XenServer虚拟化平台Windows Server操作系统&#xff0c;共两个虚拟磁盘&#xff1a;数据盘系统盘。服务器作为Web服务器使用&#xff0c;上层部署ASP SQL Se…

Chrome插件开发_V3_浏览器扩展插件基础教程

文章目录 一、简介二、核心介绍三、自定义页面背景色三、设置页面背景图&#xff08;web_accessible_resources&#xff09;四、设置徽章&#xff08;Badge&#xff09;五、桌面通知六、消息通信七、自定义右键菜单&#xff08;添加、更新、删除&#xff09;八、Omnibox九、浏览…

JVM基础知识

JVM 一次编译终身运行1.1 JVM和java的体系结构1.1.1 虚拟机与JAVA虚拟机1.1.2 JVM的位置1.1.3 JVM的整体执行流程1.1.4 JAVA代码的执行流程1.1.5 JVM架构模型1.1.6 JVM的生命周期1.1.7 Sun Classic Vm1.1.8 Exact VM1.1.9 Hotspot VM1.1.10 BEA的JRockit1.1.11 IBM的 J91.1.12 …

云渲染是什么?如何挑选云渲染平台

在影视动画、建筑设计、游戏开发等领域&#xff0c;渲染是一个非常重要的环节&#xff0c;它可以将场景、模型、纹理、材质等元素综合起来&#xff0c;生成逼真的图像或视频。然而&#xff0c;渲染也是一个非常耗时和耗能的过程&#xff0c;它需要大量的计算资源和硬件设备&…

Intel base instruction -- Jcc

检查EFLAGS寄存器中一个或多个状态标志&#xff08;CF、of、PF、SF和ZF&#xff09;的状态&#xff0c;如果这些标志处于指定状态&#xff08;条件&#xff09;&#xff0c;则执行跳转到目标操作数指定的目标指令。条件代码&#xff08;cc&#xff09;与每个指令相关联&#xf…

实用干货-汇总篇

_ 实用干货 _ 11.实用干货-基因&基因组知识回顾 (qq.com)22.实用干货—解惑NGS可能引入的错误突变 (qq.com)33.临床肿瘤NGS的常规检测流程 (qq.com)44.实用干货—DNA甲基化相关知识点整理 (qq.com)55.实用干货-NGS的QC质控和突变结果复核 (qq.com)65.实用干货-你可能没…

patch 报错 can‘t find file to patch at input line 4

错误现象&#xff1a; 解决 -p3 patch -p3 < ../speccpu2006-kylinv10-aarch64.patch

问题总结,web自动化测试元素无法操作?shadowDOM节点元素解决......

前言 web自动化遇到shadowDOM你会操作吗&#xff1f; 之前在做web自动化的时候&#xff0c;发现页面上有些元素&#xff0c;在selenium中无法通过xpath来定位&#xff0c;各种原因找了半天都没找到解决方案&#xff0c;最后发现元素在一个叫做shadow-root的节点下面&#xff…

消息通知系统设计

编辑导语&#xff1a;消息通知可以将内容实时送达用户手机页面&#xff0c;但是泛滥的消息通知会引起用户的反感&#xff0c;也违背了这个设计的初衷。如何理解以及设计消息通知&#xff0c;作者作了简单的分享&#xff0c;我们一起来看看吧。 消息通知可以及时地将状态、内容…

开发之路,穷且益坚,不坠青云之志(入门开发者共勉)

引言 2023毕业季&#xff0c;距离笔者毕业已过2年有余。 互联网从业环境由盛转衰&#xff0c;互联网从业者数量剧增&#xff0c;市场竞争异常激烈&#xff0c;原本的利润空间被不断挤压&#xff0c;以至于很多开发者对互联网已经失去了信心与激情。 互联网的市场份额依旧是占…

全志科技T507-H工业核心板规格书(4核ARM Cortex-A53,主频1.416GHz)

1 核心板简介 创龙科技SOM-TLT507是一款基于全志科技T507-H处理器设计的4核ARM Cortex-A53全国产工业核心板&#xff0c;主频高达1.416GHz。核心板CPU、ROM、RAM、电源、晶振等所有元器件均采用国产工业级方案&#xff0c;国产化率100%。 核心板通过邮票孔连接方式引出MIPI C…

6 应用层-6.1【实验】【计算机网络】

6 应用层-6.1【实验】【计算机网络】 前言推荐6 应用层6.1 Web服务与FTP服务配置0 搭建拓扑图1 Web演示2 FTP演示6.1.1实验章节测验 最后 前言 2023-6-25 14:35:53 以下内容源自《创作模板三》 仅供学习交流使用 推荐 4端到端协议-4.3【实验】【计算机网络】 6 应用层 6.…

【Java|多线程与高并发】阻塞队列以及生产者-消费者模型

文章目录 1. 前言2. 阻塞队列3. 实现阻塞队列4. 生产者-消费者模型5. 总结 1. 前言 阻塞队列(BlockingQueue)常用于多线程编程中&#xff0c;可以实现线程之间的同步和协作。它可以用来解决生产者-消费者问题&#xff0c;其中生产者线程将元素插入队列&#xff0c;消费者线程从…