pinia从0到1

一、创建项目
1. npm create vite@latest
2. 输入项目名称
3. cd 到新建的项目
4. npm install 安装项目依赖
5. npm run dev 运行项目

二、安装Pinia

npm install pinia

三、在main.js中挂载
1.引入pinia
import {createPinia} form “pinia”;
2.创建pinia对象
const pinia = createPinia();
3.挂载实例
app.use(pinia).mount(‘#app’);

四、创建store

//     ./src/store/index.js
// 1.引入pinia对象
import {defineStore} from 'pinia';// 2.创建管理状态仓库
export const useStore = defineStore("store", {// 选项式,更接近于vuexstate: () => {return {num: 1,name: 'gxy',}},getters: {},actions: {}
})

五、在组件中使用选项式store

<script setup>// 1.导入storeimport {useStore} from "../store"// 2.声明const store= useStore();</script><template><h1>HelloWorld</h1><!-- 3.展示数据 --><p>name:{{ store.name }}</p>
</template><style scoped></style>

六、组件中修改pinia数据
pinia中的数据在组件中可以直接修改值,不需要通过mutations。

<script setup>// 1.导入storeimport {useStore} from "../store"// 2.声明const store = useStore();// 4.修改state中的数据const numAdd = () => {store.num ++;}</script><template><h1>HelloWorld</h1><!-- 3.展示数据 --><p>name:{{ store.name }}</p><p>num: {{ store.num }}</p><button @click="numAdd">加</button>
</template><style scoped></style>

七、组件中解构数据进行修改

<script setup>// 1.导入storeimport {useStore} from "../store"// vue提供解构store的方式,将整个stroe中的数据元素全部解构(属性、方法等)import {toRefs} from "vue"// pinia提供解构store的方式,只解构属性。import {storeToRefs} from "pinia"// 2.声明const store = useStore();// 4.解构后修改数据,通过vue提供的方式解构出来的数据,是将整个stroe中的数据元素全部解构(属性、方法等)let {name, num} = toRefs(store);// 5.通过pinia提供的方式解构,只解构属性。// let {name, num} = storeToRefs(store);const numAdd = () => {num.value ++;}</script><template><h1>HelloWorld</h1><!-- 3.展示数据 --><p>name:{{ name }}</p><p>num: {{ num }}</p><button @click="numAdd">加</button>
</template><style scoped></style>

八、pinia对数据批量更新

<script setup>// 1.导入storeimport {useStore} from "../store"// pinia提供解构store的方式,只解构属性。import {storeToRefs} from "pinia"// 2.声明const store = useStore();let {name, num, arr} = storeToRefs(store);const numAdd = () => {// 4.批量修改数据store.$patch((state) => {state.num ++;state.name = '张三';state.arr.push(4)})// num.value ++;}</script><template><h1>HelloWorld</h1><!-- 3.展示数据 --><p>name:{{ name }}</p><p>num: {{ num }}</p><p>arr: {{ arr }}</p><button @click="numAdd">加</button>
</template><style scoped></style>

九、pinia中的getters(Pinia中的getter和Vue中的计算属性几乎一样,在获取State值之前可以做一些逻辑处理。getter中的值有缓存特性,如果值没有改变,多次使用也只会调用一次)
js

// 1.引入pinia对象
import {defineStore} from 'pinia';// 2.创建管理状态仓库
export const useStore = defineStore("store", {// 选项式,更接近于vuexstate: () => {return {num: 1,name: 'gxy',arr: [1,2,3]}},getters: {  //getter中不仅可以传递state直接改变数据状态,还可以使用this来改变数据// 通过state来获取改变数据changeNums(state) {return state.num + 5},// 通过this来获取改变数据changeNum() {// 由于该方法有缓存机制,所以不管在页面中调用几次,这里只会运行一次(log只会打印一次)。这样大大提高了运行性能。console.log('************************');return this.num + 5}},actions: {}
})

组件

<script setup>// 1.导入storeimport {useStore} from "../store"// pinia提供解构store的方式,只解构属性。import {storeToRefs} from "pinia"// 2.声明const store = useStore();let {name, num, arr, changeNum} = storeToRefs(store);</script><template><h1>HelloWorld</h1><!-- 3.展示数据 --><p>num: {{ changeNum }}</p><p>num: {{ changeNum }}</p><p>num: {{ changeNum }}</p>
</template><style scoped></style>

十、actions的使用
在actions中定义的方法在任务组件中都可以调用
js

// 1.引入pinia对象
import {defineStore} from 'pinia';// 2.创建管理状态仓库
export const useStore = defineStore("store", {// 选项式,更接近于vuexstate: () => {return {num: 1,name: 'gxy',arr: [1,2,3]}},getters: {  //getter中不仅可以传递state直接改变数据状态,还可以使用this来改变数据},actions: {upData(val) {this.num += val}}
})

组件

<script setup>// 1.导入storeimport {useStore} from "../store"// pinia提供解构store的方式,只解构属性。import {storeToRefs} from "pinia"// 2.声明const store = useStore();let {name, num, arr, changeNum} = storeToRefs(store);const updata = () => {store.upData(200)}
</script><template><h1>HelloWorld</h1><!-- 3.展示数据 --><p>num: {{ changeNum }}</p><p>num: {{ changeNum }}</p><p>num: {{ changeNum }}</p><p>nums: {{ num }}</p><!-- 4.调用actions里的方法来实现更新数据 --><div @click="updata">upDate</div>
</template><style scoped></style>

十一、Pinia模块互相调用

1.在store中创建一个Shop.js,用于管理店铺数据。
2.在主管理器中引入Shop管理器,通过实例后就可以获取到Shop中的数据了。

import {defineStore} from 'pinia';// 1.导入shop模块
import {useShopStore} from './shop';export const useStore = defineStore("store", {// 选项式,更接近于vuexstate: () => {return {num: 1,name: 'gxy',arr: [1,2,3]}},getters: {  //getter中不仅可以传递state直接改变数据状态,还可以使用this来改变数据// 获取shop数据方法getShopList() {return useShopStore().list;}},actions: {upData(val) {this.num += val}}
})

组件

<script setup>// 1.导入storeimport {useStore} from "../store"// pinia提供解构store的方式,只解构属性。import {storeToRefs} from "pinia"// 2.声明const store = useStore();let {name, num, arr, getShopList} = storeToRefs(store);const updata = () => {store.upData(200)}
</script><template><h1>HelloWorld</h1><!-- 3.展示数据 --><p>num: {{ changeNum }}</p><p>num: {{ changeNum }}</p><p>num: {{ changeNum }}</p><p>nums: {{ num }}</p><!-- 展示shop数据 --><p>shop: {{ getShopList }}</p><!-- 4.调用actions里的方法来实现更新数据 --><div @click="updata">upDate</div>
</template><style scoped></style>

十二、pinia数据持久化
1.安装插件
npm install pinia-plugin-persist

2.在main.js中挂载该插件

import { createApp } from 'vue'
import App from './App.vue'
import {createPinia} from "pinia"// 1.导入 pinia持久化插件
import PiniaPluginPersist from "pinia-plugin-persist"const pinia = createPinia();// 2.将插件注册在Pinia中
pinia.use(PiniaPluginPersist)const app = createApp(App);app.use(pinia);app.mount('#app');

3.在对应的数据管理器中配置持久化

import {defineStore} from "pinia"export const useShopStore = defineStore('shop', {state: () => {return {list: ['零食','生鲜'],price: [12,13]}},getters: {getShopList() {return this.list;}},actions: {upData(name, price) {this.list.push(name);this.price.push(price)}},// 使用插件开启数据缓存persist: {enabled: true,strategies: [{// key的名称key: "my-shop",// 更改默认存储,改为localStoragestrorage: localStorage,// 默认是全部进行存储**// 可以选择哪些进行local存储的数据,这样就不用全部都进行存储了。这里把list进行了持久化保存**paths: ["list"],}]}
})

4.组件查看

<script setup>// 1.导入storeimport {useShopStore} from "../store/shop"// pinia提供解构store的方式,只解构属性。import {storeToRefs} from "pinia"// 2.声明const store = useShopStore();let {list,price,getShopList} = storeToRefs(store);**//在这里更新数据时分别给商品列表和商品价格都添加了数据,当页面刷新时商品价格列表中添加的数据没有被持久保存,商品名称被持久保存了**const updata = () => {store.upData('酒水', 200)}
</script><template><h1>HelloWorld</h1><!-- 3.展示数据 --><p>list: {{ list }}</p><p>price: {{ price }}</p><p>shop: {{ getShopList }}</p><!-- 4.调用actions里的方法来实现更新数据 --><div @click="updata">upDate</div>
</template><style scoped></style>

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

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

相关文章

Codigger集成Copilot:智能编程助手

在信息技术的快速发展中&#xff0c;编程效率和创新能力的提升成为了开发者们追求的目标。Codigger平台通过集成Copilot智能编程助手&#xff0c;为开发者提供了一个强大的工具&#xff0c;以增强其生产力、创新力和技能水平。本文将深入探讨Codigger与Copilot的集成如何为IT专…

IP寻址映射与网络通信互联

IP寻址映射 IP寻址映射能够让数据准确传输的重要部分。在网络之中&#xff0c;所有联网的设备都具有一个IP地址&#xff0c;而IP寻址映射就是负责将IP地址与设备位置或其他相关标识相联系起来&#xff0c;确保数据找到正确的路径传输&#xff0c;保障网络能够畅通。 动态主机配…

Java [后端] 开发日常记录(1)

目录 1、常用的注解 2、对字符串的处理 3、对JSON串的处理 -- The End -- 详细如下&#xff1a; 1、常用的注解 若返回的字段中有NUll&#xff0c;则不返回 JsonInclude(value JsonInclude.Include.NON_NULL) //在实体类中添加这个注解 JsonInclude(JsonInclude.Include.NON…

C高级:Day3

思维导图 总览 链接&#xff1a;C高级&#xff1a;思维导图-CSDN博客 用数组求出当前目录下以.sh结尾文件个数 用数组求出当前目录下所有文件个数 代码 结果 表明 直接通配任意名称文件&#xff0c;也会通配隐藏文件

地理数据库Telepg面试内容整理-相关技术与工具

以下是与 GIS(地理信息系统)相关的技术与工具的全面整理。这些技术和工具涵盖数据存储、处理、分析、可视化等多个领域,适用于构建和优化 GIS 应用。 数据存储 (1) 空间数据库 ● PostGIS: ○

Anaconda+PyTorch(CPU版)安装

1.Anaconda下载 Index of /anaconda/archive/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror 如果已安装python&#xff0c;下载之前要彻底删除之前下载的python 2.Anaconda安装 3.添加环境变量 //根据实际安装路径进行更改 D:\Anaconda D:\Anaconda\Scripts D:\…

【RISC-V CPU debug 专栏 4 -- RV CSR寄存器介绍】

文章目录 Overview1. CSR寄存器访问指令2. 为何CSR地址不是4字节对齐(1) CSR寄存器空间是独立的地址空间(2) 节省编码空间(3) 对硬件实现的简化 3. CSR的物理大小和对齐无关总结 Overview 思考个问题&#xff1a; RISC-V 64bit CSR 寄存器是如何访问的&#xff0c;为何地址不是…

ROS2+OpenCV综合应用--10. AprilTag标签码追踪

1. 简介 apriltag标签码追踪是在apriltag标签码识别的基础上&#xff0c;增加了小车摄像头云台运动的功能&#xff0c;摄像头会保持标签码在视觉中间而运动&#xff0c;根据这一特性&#xff0c;从而实现标签码追踪功能。 2. 启动 2.1 程序启动前的准备 本次apriltag标签码使…

正弦函数解析(sin.rs)

sin.rs文件提供了sin函数的实现&#xff0c;它计算并返回一个浮点数&#xff08;f64类型&#xff09;的正弦值。这个函数首先处理了一些特殊情况&#xff0c;如极小的值、无穷大和NaN&#xff08;非数字&#xff09;&#xff0c;然后使用rem_pio2函数将输入参数x归约到[-π/2, …

如何查看服务器内存占用情况?

如何查看服务器的内存占用情况&#xff1f;你知道内存使用情况对服务器性能的重要性吗&#xff1f;内存是服务器运行的核心资源之一&#xff0c;了解内存的占用情况可以帮助你优化系统性能。 要查看服务器的内存占用情况&#xff0c;首先需要确定你使用的是哪种操作系统。不同…

Linux内核修改内存分配策略

今天遇到了如下的内核报错 Java HotSpot(TM) 64-Bit Server VM warning: INFO: os::commit_memory(0x00007f0e1e06c000, 65536, 1) failed; errorCannot allocate memory (errno12)这个报错是因为&#xff0c;linux会对大部分的内存资源申请都回复允许&#xff0c;以便于运行更…

【MATLAB APP Designer】小波阈值去噪(第一期)

代码原理及流程 小波阈值去噪是一种信号处理方法&#xff0c;用于从信号中去除噪声。这种方法基于小波变换&#xff0c;它通过将信号分解到不同的尺度和频率上来实现。其基本原理可以分为以下几个步骤&#xff1a; &#xff08;1&#xff09;小波变换&#xff1a;首先对含噪信…

C语言 练习2

1.求10个整数中的最大值 //求10个整数中的最大值 int main() {//准备10个数//char arr[10] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };//输入10个数char arr[10] { 0 };int i 0;for (i 0; i < 10; i){scanf("%d", &arr[i]);}//找出最大值int max arr[0];for (…

Java Map 集合详解:基础用法、常见实现类与高频面试题解析

在 Java 集合框架中&#xff0c;Map 是用于存储键值对&#xff08;Key-Value&#xff09;的重要接口&#xff0c;广泛应用于开发中的各种场景。本文将详细讲解 Map 的基础概念、常见实现类及其特性&#xff0c;并结合代码示例和高频面试问题&#xff0c;帮助你深入理解 Map 的用…

ubuntu 使用samba与windows共享文件[注意权限配置]

在Ubuntu上使用Samba服务与Windows系统共享文件&#xff0c;需要正确配置Samba服务以及相应的权限。以下是详细的步骤&#xff1a; 安装Samba 首先&#xff0c;确保你的Ubuntu系统上安装了Samba服务。 sudo apt update sudo apt install samba配置Samba 安装完成后&#xff0c…

lua-debug for Sublime

目标 Sublime 也支持 lua-debug&#xff0c;操作体验与 VSCode 一致。 优势 执行效率高&#xff0c;不掉帧 可随时开启 配置简单&#xff0c;一份配置兼容 VSCode 和 Sublime 安装 要求 Sublime 4 的版本&#xff08;注&#xff1a;从 Sublime 3 升到 4 的不算&#xff0c;…

光伏电站发电量提升秘籍

在如今这个倡导清洁能源的时代&#xff0c;光伏电站成为了不少人的选择。但怎样才能让自家的光伏电站发电量更高呢&#xff1f;下面就给大家分享几个实用方法。 一、光伏组件的选择与安装角度至关重要。优质的光伏组件转换效率更高&#xff0c;像单晶硅组件就比多晶硅组件在转…

pytorch 计算图中的叶子节点介绍

1. 什么是叶子节点&#xff1f; 在 PyTorch 的自动微分机制中&#xff0c;叶子节点&#xff08;leaf node&#xff09; 是计算图中&#xff1a; 由用户直接创建的张量&#xff0c;并且它的 requires_gradTrue。这些张量是计算图的起始点&#xff0c;通常作为模型参数或输入变…

flux文生图模型实践

flux文生图模型实践 flyfish https://github.com/black-forest-labs/flux Black Forest Labs发布FLUX.1 Tools&#xff0c;这是一套模型全家桶&#xff0c;旨在为FLUX.1基础文本转图像模型添加控制和可操纵性&#xff0c;从而实现对真实图像和生成图像的修改和重新创建。FLU…

macos 支持外接高分辩率显示器开源控制软件

macos 支持外接高分辩率显示器开源控制软件 软件&#xff08;app应用&#xff09;名&#xff1a;BetterDisplay 官方地址&#xff1a; https://github.com/waydabber/BetterDisplay