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;也会通配隐藏文件

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:\…

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

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

【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 (…

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;像单晶硅组件就比多晶硅组件在转…

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

UCAS 24秋网络认证技术 CH15 Kerberos复习

Key Distribution Center-KDC 基本流程可分为两大部分&#xff1a;初始认证 和 服务票据获取与使用。 初始认证 Authenticate&#xff1a;客户端向认证服务器&#xff08;Authentication Server&#xff0c;AS&#xff09;发送请求以验证身份。Receive TGT&#xff1a;AS 验证…

Edge如何获得纯净的启动界面

启动Edge会出现快速链接&#xff0c;推广链接&#xff0c;网站导航&#xff0c;显示小组件&#xff0c;显示信息提要&#xff0c;背景 ●复杂页面 ●精简页面 点击页面设置按钮 关闭快速链接 关闭网站导航 关闭小组件 关闭信息提要 关闭背景 关闭天气提示 精简页面看起来十分舒…

管理系统中经典审核功能实现

前言 先简单交代和阐述一下业务背景和逻辑&#xff0c;该系统是一个综合类的音乐系统&#xff0c;上传音乐时&#xff0c;逻辑和qq音乐一样&#xff0c;前端页面就能体现出大概逻辑&#xff0c;如下图所示&#xff1a; 专辑和歌曲是密不可分的&#xff0c;而且歌曲的封面就是对…

《机器学习》——利用OpenCV库中的KNN算法进行图像识别

文章目录 KNN算法介绍下载OpenCV库实验内容实验结果完整代码手写数字传入模型训练 KNN算法介绍 一、KNN算法的基本要素 K值的选择&#xff1a;K值代表选择与新测试样本距离最近的前K个训练样本数&#xff0c;通常K是不大于20的整数。K值的选择对算法结果有重要影响&#xff0c…

[服务器][教程]Ubuntu24.04 Server开机自动挂载硬盘教程

1. 查看硬盘ID ls -l /dev/disk/by-uuid可以看到对应的UUID所对应的分区 2. 创建挂载文件夹 创建好文件夹即可 3. 修改配置文件 sudo vim /etc/fstab把对应的UUID和创建的挂载目录对应即可 其中# Personal mount points下面的是自己新添加的 &#xff1a;分区定位&#xff…

惠州市政数局局长杨伟斌:惠州市公共数据授权运营模式探索

近期&#xff0c;2024数字资产管理大会召开。会上&#xff0c;惠州市政务服务和数据管理局局长杨伟斌在会上做了题为基于“隐私计算区块链”的惠州市公共数据授权运营模式探索主旨演讲&#xff0c;从三个方面展开&#xff0c;一是建制度汇数据&#xff0c;二是夯基础保安全&…

查看 GitHub 仓库的创建时间

查看 GitHub 仓库的创建时间 1. https://api.github.com/repos/{owner}/{repository}2. curl -s https://api.github.com/repos/{owner}/{repository} | jq .created_atReferences 1. https://api.github.com/repos/{owner}/{repository} REST API endpoints for repositories…