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

news/2024/12/29 2:57: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  能够做同步,异步   提交stateactions: {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.ppmy.cn/news/489315.html

相关文章

一文带你学会Lua语言

一文带你学会Lua语言 1.第一个Lua程序2.Lua流程控制3.Lua中的循环结构while循环语句for循环语句repeat循环语句 4.Lua数据类型5.Lua字符串6.Lua文件I/O操作7.Lua协同程序8.Lua语言中的注释和虚变量 1.第一个Lua程序 在命令行中&#xff0c;可以使用print()来打印输出一些内容 …

Unittest二次开发实战

目录 前言 unittest.TestResult类简介 TestResult类定制目标 实现步骤 测试结果summary格式规划 单个用例结果格式规划 用例tags和level的实现 根据测试方法对象获取用例代码 单个用例结果类的实现 TestResult属性及初始化方法 测试开始和测试结束 用例开始和用例结束 1. 重写恢…

常见web中间件漏洞复现总结

文章目录 IISPUT漏洞iis6.0 解析漏洞IIS短文件漏洞远程代码执行(RCE-CVE-2017-7269)iis7.x文件解析漏洞HTTP.SYS远程代码执行 (MS15-034) apache未知扩展名解析漏洞AddHandler解析漏洞目录遍历漏洞Apache HTTPD 换行解析漏洞&#xff08;CVE-2017-15715&#xff09; Nginx文件解…

Linux进程替换

目录 进程替换 1.定义&#xff1a; 2.为什么要进行进程替换&#xff1f; 3.怎样进行进程程序替换&#xff1f; 4.进程替换的原理&#xff1a; 原理总结&#xff1a; 5.Linux进程替换的函数&#xff1a; 5.1参数: 5.2函数返回值问题&#xff1a; 5.3&#xff1a;execl…

【Java】死锁问题及ThreadLocal

什么是死锁分析过程发生死锁的原因避免死锁ThreadLocal 什么是死锁 多个线程同时被阻塞&#xff0c;它们中的一个或者全部都在等待某个资源被释放。由于线程被无限期地阻塞&#xff0c;因此程序不可能正常终止。这是一个最严重的BUG之一。 分析过程 1.一个线程一把锁 一个线…

特定偏好的效用函数——CES效用函数

说明&#xff1a;做单调变化(monotonic transformation)是合理的&#xff0c;因为效用的数值大小是没有意义的&#xff0c;有意义的是相对排序&#xff0c;体现的是序数性质而不是基数性质 见p51~p52 中文第11版教材上关于CES效用函数的形式是如下的表述&#xff1a; U ( x ,…

CES生产函数中参数的意义

CES生产函数是形如的函数&#xff0c;其中是各投入物对产出的贡献&#xff0c;是弹性参数&#xff0c;是替代弹性 至于为什么是替代弹性&#xff0c;可参见这篇博文&#xff08;注意ta的公式中的和我的差一个正负号&#xff09; https://blog.csdn.net/baimafujinji/article/…