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

news/2024/5/18 22:37:58 标签: 流程图, javascript, 开发语言, vue, vue.js

1.准备

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

2.注册pinia

1.在main中注册pinia

javascript">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内容如下:

javascript">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内容如下:

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

文件格式

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

app.vue文件的内容如下:

javascript"><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++

javascript"><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批量修改

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

一刀

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

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

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

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

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

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

javascript">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的内容如下:

javascript"><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中值的变化

javascript"><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.niftyadmin.cn/n/452219.html

相关文章

数据库系统概述——第十章 数据库恢复技术(知识点复习+练习题)

&#x1f31f;博主&#xff1a;命运之光 &#x1f984;专栏&#xff1a;离散数学考前复习&#xff08;知识点题&#xff09; &#x1f353;专栏&#xff1a;概率论期末速成&#xff08;一套卷&#xff09; &#x1f433;专栏&#xff1a;数字电路考前复习 &#x1f99a;专栏&am…

excel爬虫相关学习2:excel 和 vba 爬虫相关xmlhttp方法

目录 前言&#xff1a;vba 爬虫相关xmlhttp的方法 1 什么是xmlhttp 1.1 定义 1.2 特点 定义XMLHTTP对象&#xff1a; XMLHTTP方法&#xff1a; open(bstrMethod, bstrUrl, varAsync, bstrUser, bstrPassword) send(varBody) setRequestHeader(bstrHeader, bstrValue) …

主成分分析(Principal Component Analysis, PCA)原理全面解析与应用

目录 1. PCA算法概述2. 数据预处理3. 协方差矩阵计算4. 特征值与特征向量5. 选择主成分6. 数据投影7. PCA的优缺点8. PCA算法应用 主成分分析&#xff08;Principal Component Analysis, PCA&#xff09;是一种常用的降维技术&#xff0c;用于数据的特征提取和数据可视化。本文…

FPGA课程设计——数字电子时钟VERILOG(基于正点原子新起点开发板,支持8位或6位共阳极数码管显示时分秒毫秒,可校时,可设闹钟,闹钟开关,led指示)

2019 级 电子科学与技术 专业FPGA课程设计 报 告 2022 年 5 月 20 日 多功能数字电子钟的设计 摘要 电子设计自动化&#xff08;EDA&#xff09;是一种实现电子系统或电子产品自动化设计的技术&#xff0c;使用EDA技术设计的结果既可以用FPGA / CPLD来实施验证&#xff0c;…

vue配置反向代理的使用

反向代理&#xff1a;常用于生产环境&#xff0c;项目部署时服务器的配置。 反向代理&#xff1a;同样创建一个代理服务器&#xff0c;用于接收客户端发送的请求&#xff0c;再将请求转发给内部网络上的服务器&#xff0c;从服务器中获取数据并返回给客户端。也就是 代理服务端…

STM32--基于固件库(Library Faction)的led灯点亮

目录 一、STM32芯片的简单介绍 二、基于固件库&#xff08;Library Faction&#xff09;的led灯点亮 这是一个学习stm32的开端&#xff0c;我们由简入难&#xff0c;之前学过C51/52或是其他型号的一般都是从led开始&#xff0c;也就是简单的输入输出端口的应用。&#xff08;想…

Java中关于字符串常量池的详解!!!

字符串常量池 前言1. 直接赋值法&#xff0c;默认从常量池中取对象2. new一个对象3. 字符串常量池、字符串对象、内部的value引用、具体的字符数组之间的关系4. 手动入池方法&#xff1a;intern方法 前言 Java使用 “ ” 称为字符串常量&#xff0c;为了提高程序的运行速度&am…

Java官方笔记12异常

Exception Definition: An exception is an event, which occurs during the execution of a program, that disrupts the normal flow of the programs instructions. the checked exception 比如&#xff0c;java.io.FileNotFoundException the error 比如&#xff0c;java.i…