在vue3中使用pinia完整流程图文

news2024/11/24 14:23:14

1.准备

  1. 使用vite创建好一个vue3项目,开发语言选择ts
  2. 使用 npm i pinia -s 安装最新版本的pinia 这里我的版本安装的是 2.1.4

2.注册pinia

1.在main中注册pinia

import { createApp, createApp } from "vue";
import "./style.css";
import App from "./App.vue";
import { createPinia } from "pinia";

let app = createApp(App);
const store = createPinia();

app.use(store);
app.mount("#app");

2.在store中创建index.ts和store-name.ts文件

index.ts内容如下:

import { defineStore } from "pinia";

import { Names } from "./store-name";
export const useTestStore = defineStore(Names.TEST, {
  state: () => {
    return {
      current: 1,
      name: "不染-9732",
    };
  },
  getters: {},
  actions: {},
});

store-name.ts内容如下:

export const enum Names {
  TEST = "TEST",
}

文件格式

3.在app.vue文件中使用store中的参数

app.vue文件的内容如下:

<template>
  <div>app.vue===>pinia:{{ Test.current }}--{{ Test.name }}</div>
</template>

<script setup lang="ts">
import { useTestStore } from "./store/index";
const Test = useTestStore();
</script>

页面输出如下内容则一次简单的pinia的调用完成

输出结果

4.修改store中参数的值

1.直接修改 Test.current++

<template>
  <div>app.vue===>pinia:{{ Test.current }}--{{ Test.name }}</div>
  <button @click="change">修改值</button>
</template>

<script setup lang="ts">
import { useTestStore } from "./store/index";
const Test = useTestStore();

const change=()=>{
  Test.current++
}
</script>

另存为

2.使用$patch批量修改


const change=()=>{
  // Test.current++
  Test.$patch({
    current:9999,
    name:'一刀!'
  })
}

一刀

3.使用$patch结合工厂函数修改内容【推荐】


const change=()=>{
  Test.$patch((state=>{
    state.current=999999,
    state.name='两刀'
  }))
}

4.使用$state完全覆盖原有对象进行修改【需要完全覆盖 不推荐】

const change=()=>{
  Test.$state={
    current:66,
    name:'非酋玩家'
  }
}

5.使用store中的actions定义方法修改state中的值

修改store中的index.ts中内容如下

import { defineStore } from "pinia";

import { Names } from "./store-name";
export const useTestStore = defineStore(Names.TEST, {
  state: () => {
    return {
      current: 1,
      name: "不染-9732",
    };
  },
  getters: {},
  // methods  能够做同步,异步   提交state
  actions: {
    setCurrent(num:number) {
      this.current = num;
    },
    setName(name:string) {
        this.name = '土豪玩家';
      },
  },
});

完整的App.vue的内容如下:

<template>
  <div>app.vue===>pinia:{{ Test.current }}--{{ Test.name }}</div>
  <button @click="changeCurrent">修改值</button
  ><button @click="changeName">修改名字</button>
</template>

<script setup lang="ts">
import { useTestStore } from "./store/index";
const Test = useTestStore();

const changeCurrent = () => {
  // Test.current++
  // Test.$patch({
  //   current:9999,
  //   name:'一刀!'
  // })
  // Test.$patch((state=>{
  //   state.current=999999,
  //   state.name='两刀'
  // }))
  // Test.$state={
  //   current:66,
  //   name:'非酋玩家'
  // }
  Test.setCurrent(888888);
};

const changeName = () => {
  Test.setName("土豪玩家");
};
</script>

土豪

5. pinia中的$subscribe 监听state中值的变化

<template>
  <div>app.vue===>数值:{{ Test.current }}  --名字:{{ Test.name }}</div>
  <button @click="changeCurrent">修改值</button
  ><button @click="changeName">修改名字</button>
</template>

<script setup lang="ts">
import { useTestStore } from "./store/index";
const Test = useTestStore();

Test.$subscribe((args,state)=>{
  // args  当前修改的数据
  // state  state中所有数据的值
  console.log('args===>',args);
  console.log('state===>',state);
  
})

const changeCurrent = () => {
  Test.current++
};

const changeName = () => {
  Test.setName("土豪玩家");
};
</script>

监听

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

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

相关文章

Contrastive Representation Learning 对比表征学习(三)视觉:图像嵌入(1)

原文翻译自这里 视觉&#xff1a;图像嵌入&#xff08;Image Embedding&#xff09; 图像增强 在视觉领域&#xff0c;大多数面向对比表征学习的方案均依赖于通过应用数据增强技术的序列组合来创建样本的噪声形式。而这种增强需要满足保持语义不变的同时极大的改变其视觉外观…

既有内销又有外贸,多样性外贸业务管理解决方案

随着外贸数字化贸易全球化的深入发展&#xff0c;出口、进口、内销业务越来越受到关注。外贸业务是企业在海外市场进行商品贸易&#xff0c;而内销业务是企业在国内市场进行商品贸易。在管理这种业务时&#xff0c;想要实现降本增效&#xff0c;企业需要有一套成熟的管理解决方…

Redis什么是缓存穿透、击穿、雪崩?如何解决

缓存与后端系统 通常后端会采用Mysql等磁盘数据库&#xff0c;可以持久化但是访问慢&#xff0c;高并发时性能差&#xff0c;需要设置Nosql内存型数据库缓存&#xff1a;Redis等 但缓存可能出现&#xff1a;缓存穿透、缓存击穿、缓存雪崩等问题 认识缓存穿透、击穿、雪崩 热点…

Vue2:怎么实现响应式双向绑定?

一、vue2怎么实现双向绑定原理 在Vue2中&#xff0c;双向绑定的实现是通过Vue2的响应式系统和数据绑定机制来完成的。下面是Vue2实现双向绑定的简要原理&#xff1a; 数据劫持&#xff1a;当创建Vue实例时&#xff0c;Vue2会对data选项中的所有属性进行数据劫持。这通过使用Ob…

【单元测试】Junit 4教程(一)--白盒测试方法

目录 1.0 流程图标识 1.1 语句覆盖法&#xff08;C0标准&#xff09; 1.2 判定/分支覆盖法&#xff08;C1标准&#xff09; 1.3 条件覆盖法&#xff08;C2标准&#xff09; 1.4 判定条件覆盖法&#xff08;C1C2标准&#xff09; 1.5 条件组合覆盖法&#xff08;C3标准&am…

【ESP8266】基础AT指令和常用WIF指令

【ESP8266 &#xff08;12F&#xff09;】硬件参数 以及 固件烧录 文章目录 一、常用AT命令1.1 基础1.2 WiFi相关1.21 ATCWMODE&#xff1a;查询/设置 Wi-Fi 模式 (Station/SoftAP/StationSoftAP)1.22 ATCWJAP&#xff1a;连接 AP1.23 ATCWLAP&#xff1a;扫描当前可用的 AP1.2…

容器JVM内存配置最佳实践

背景信息 当您的业务是使用Java开发&#xff0c;且设置的JVM堆空间过小时&#xff0c;程序会出现系统内存不足OOM&#xff08;Out of Memory&#xff09;的问题。事件中心的OOM事件是指系统内存不足时&#xff0c;触发了Linux的内存回收&#xff08;OOM Killer&#xff09;机制…

7D性能工程初级班第一期开班了!

Slogan&#xff1a;领略性能艺术的壮阔、感受性能测试的博大精深 课程大纲见&#xff1a;【7D-RESAR 性能工程初级班大纲】 报名流程 讲师介绍 高楼老师&#xff1a; 性能领域公认的具有匠心的技术专家。架构级性能解决方案资深专家。性能测试调优分析18年经验&#xff0c;…

Java中的实体类为什么要 implements Serializable?

1. 序列化和反序列化 首先来解释一下什么是序列化和反序列化&#xff1a; 序列化&#xff1a;把对象转换为字节序列的过程称为对象的序列化。 反序列化&#xff1a;把字节序列恢复为对象的过程称为对象的反序列化。 在 Java 和其他语言进行通信的时候&#xff0c;需要将对象…

安卓手机ROOT和刷机基本操作——以红米Note7刷安卓原生系统并Root为例

文章目录 前言一.简介1. 安卓权限2. 安卓分区Boot分区System分区Data分区Cache分区Recovery分区 3. Fastboot 二.前置准备1. Android SDK 工具2. 解BL锁 三. ROOT1.Fastboot线刷(推荐)获取系统boot镜像修补boot.img刷入boot 2. Recovery卡刷(可以尝试) 四. 红米Note7刷安卓原生…

Burpsuite介绍及2022.8.2版本超详细安装教程(图文版)

Burpsuite介绍及2022.8.2版本超详细安装教程&#xff08;图文版&#xff09; 文章目录 Burpsuite介绍及2022.8.2版本超详细安装教程&#xff08;图文版&#xff09;Burpsuite是什么&#xff1f;Burpsuite环境配置及安装JDK选择及配置Burpsuite下载安装 Burpsuite快捷启动方式选…

卷积神经网络中池化层的详细介绍

卷积神经网络自2012年&#xff0c;到2023年经历了翻天覆地的变化。最早的卷积神经网络由卷积层、池化层和全连接层所构成。其中卷积层用于提取图像的特征&#xff0c;池化层削减特征数量&#xff0c;全连接层用于对特征进行非线性组合并预测类别。然而在transformer横行的年代&…

【瑞吉外卖】适合速成SpringBoot和MyBatis的作业项目

文章目录 零、MyBatisPlus一、管理端登录1.0 统一的返回结果Result类1.1 admin/login1.2 admin/logout1.3 Filter1.4 自定义消息转换器 二、员工管理2.1 新增员工-字段填充2.2 全局异常捕获2.3 员工信息分页查询 三、分类管理3.1 分类的删除 四、菜品管理4.1 文件的上传与下载1…

CNAPPs投资热度持续攀升 腾讯云被Gartner评为全球案例厂商

近日&#xff0c;Gartner发布《新兴技术&#xff1a;在三重挤压中蓬勃发展—对云安全风险投资的关键洞察》&#xff08;Emerging Tech: Thriving Amid the Triple Squeeze— Critical Insights on VC Funding for Cloud Security&#xff09;&#xff08;以下简称《报告》&…

Flink 学习五 Flink 时间语义

Flink 学习五 Flink 时间语义 1.时间语义 在流式计算中.时间是一个影响计算结果非常重要的因素! (窗口函数,定时器等) Flink 可以根据不同的时间概念处理数据。 处理时间: process time System.currentTimeMillis()是指执行相应操作的机器系统时间&#xff08;也称为纪元时间…

优化|如何减小噪声和误差对梯度下降法的影响

编者按&#xff1a; ​ 许多精确算法在理论上能保证我们的目标函数值一直下降。在随机梯度下降以及无导数优化等情况下&#xff0c;目标移动方向受到噪声干扰&#xff0c;与实际下降方向往往会存在偏差。本文将分析噪声和下降偏差对于梯度下降法等算法的影响&#xff0c;并且介…

SpringMVC08:拦截器+文件下载

目录 一、概述 二、自定义拦截器 1、新建一个Moudule&#xff0c;SpringMVC-07-Interceptor&#xff0c;添加web支持&#xff1b; 2、配置web.xml和springmvc-servlet.xml文件 3、编写一个拦截器 4、在springmvc的配置文件中配置拦截器 5、编写一个Controller&#xff0…

【数据库】Mysq备份与恢复

文章目录 一、数据库备份的分类1. 数据备份的重要性2. 数据库备份的分类3. 常见的备份方法 二、Mysql 完全备份与恢复1. Mysql 完全备份2. 数据库完全备份分类2.1 物理冷备份及恢复2.2 mysqldump 备份数据库完全备份一个或多个完整的库&#xff08;包括其中所有的表&#xff09…

基于YOLOv5实现安全帽检测识别

目录 1、作者介绍2、YOLOv5网络模型2.1 算法简介2.2 数据集介绍2.2.1 VOC数据集准备2.2.2 YOLOv5算法检测流程 3、代码实现3.1 数据集划分部分代码3.2 训练阶段3.3 测试阶段3.4 检测结果 4、问题与分析参考链接 1、作者介绍 陈梦丹&#xff0c;女&#xff0c;西安工程大学电子…

【6.20】sleep()和wait()的区别

sleep()和wait()的区别 1、wait()方法 1.1使用场景 当某个线程获取到锁后&#xff0c;却还是不满足执行的条件&#xff0c;就可以调用对象锁的wait方法&#xff0c;进入等待状态。 直到外在条件满足了&#xff0c;就可以由其它线程调用notify或者notifyAll方法&#xff0c;…