pinia从入门到使用

pinia: 比vuex更适合vue3的状态管理工具,只保留了vuex 原有的 state, getters,actions 作用等同于 data computed methods,可以有多个 state

1.安装创建导入
安装:npm install piniayarn add pinia
创建stores/index.js
index.js

import { createPinia } from "pinia";
const pinia = createPinia()
export default pinia

导入

import { createApp } from 'vue'
import App from './App.vue'
import pinia from "./stores/index"
createApp(App).use(pinia).mount('#app')

2 使用state
在stores下新建 counter.js文件夹,使用defineStore 创建 传入一个(唯一名称), 命名时一般使用use + (唯一名称)

import { defineStore } from 'pinia'
const useCounter = defineStore('counter', {state: () => ({count: 99,name:'陆青',age:24,level: 200})
})
export default useCounter

在页面使用 不推荐使用解构赋值 ,解构之后不是响应式的 但可以通过vue 的 toRefs 以及 pinia 提供的 storeToRefs 变为响应式

<template><div><div>{{ counterStore.count }}</div><div>{{ count }}</div><button @click="add">+1</button><hr/><h1>{{name}}</h1><h1>{{age}}</h1><h1>{{level}}</h1><button @click="updateState">修改state</button><button @click="resetState">初始化state</button></div>
</template>
<script setup>
// pinia  只有 state getters actions 等同于 data computed methods
// pinia  可以有多个 state  使用defineStore 创建 传入一个(唯一名称), 命名时一般使用use + (唯一名称),
// pinia  不推荐使用解构赋值 ,解构之后不是响应式的  但可以通过vue 的 toRefs 以及 pinia 提供的 storeToRefs 变为响应式
import useCounter from "./stores/counter";
import { toRefs } from "vue";
import { storeToRefs } from "pinia";
const counterStore = useCounter();// const { count } = toRefs(counterStore);
const { count,name,age,level } = storeToRefs(counterStore);
function add() {counterStore.count++;
}
function updateState(){// 单个修改// counterStore.name = '陆景'// counterStore.age = 22//多个修改counterStore.$patch({name:'青子',age:100,level:220})
}
function resetState(){counterStore.$reset()
}
</script>

3使用 getters
在stores下新建 user.js文件夹
方法一:使用 state

// 使用 stategetContent(state) {return state.name + state.content},

方法二:使用this

 // 使用thisgetLive() {return '我很喜欢的一句话是' + this.getContent},

接收函数

  // 接收函数getFun(state) {return function (id) {for (var i = 0; i < state.list.length; i++) {const item = state.list[i]if(item.id == id){return item}}}},

使用别的state 里面的值

import useCounter from './counter'//使用别的stateshowMessage(state) {const storeCounter = useCounter()return this.getContent + '我是另一个state里面的' + storeCounter.name}

完整的user.js

import { defineStore } from 'pinia'
import useCounter from './counter'const useUser = defineStore('user', {state: () => ({list: [{name: 'vuex',id: 11},{name: 'pinia',id: 22}],name: '言念',content: '君子,温其如玉'}),getters: {// 使用 stategetContent(state) {return state.name + state.content},// 使用thisgetLive() {return '我很喜欢的一句话是' + this.getContent},// 接收函数getFun(state) {return function (id) {for (var i = 0; i < state.list.length; i++) {const item = state.list[i]if(item.id == id){return item}}}},//使用别的stateshowMessage(state) {const storeCounter = useCounter()return this.getContent + '我是另一个state里面的' + storeCounter.name}}
})
export default useUser

在页面使用

<template><div><h1>{{ storeUser.getContent }}</h1><h1>{{ storeUser.getLive }}</h1><h1>id为11:{{ storeUser.getFun(11)}}</h1><h1>{{ storeUser.showMessage }}</h1></div>
</template>
<script setup>
import useUser from "./stores/user";
const storeUser = useUser();
</script>
<style>
</style>

3 使用actions
在stores下新建 home.js文件夹

import { defineStore } from 'pinia'const useBanner = defineStore('banner', {state: () => ({banner: [],count: 10}),actions: {getCount(num) {this.count += num},async getBanner() {const res = await fetch('xxx/xxx/xxx')const data = await res.json()console.log(data.data.banner.list);this.banner = data.data.banner.listconsole.log(this.banner);}}
})export default useBanner

在页面使用

<template><div><h1>{{ storeBanner.count }}</h1><button @click="getAdd">+10</button><div v-for="(item,index) in  storeBanner.banner" :key="index"><img :src="item.image"/></div></div>
</template>
<script setup>
import useBanner from "./stores/home";
const storeBanner = useBanner();
function getAdd() {storeBanner.getCount(10);
}
storeBanner.getBanner().then(res=>{console.log('请求完成了!!');
})
</script>

效果图
在这里插入图片描述

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

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

相关文章

java springboot中使用 AOP监听方法执行周期

首先 我们在 pom.xml 中 dependencies标签中加入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId> </dependency>然后 我们随便创建一个类 编写代码如下 package com.ex…

学习grdecl文件格式

一、初步了解 最近在学习grdecl文件格式&#xff0c;文档不多。查找资料发现&#xff0c;这个格式的文件是由斯伦贝谢公司的ECLIPSE专业软件生成的。 搜到一些文档&#xff0c;都是2010年之前的&#xff0c;似乎有些用处。文档也交代了这个文件格式分为二进制和文本格式…

设计问卷调查问题的技巧二:确定问题的结构与顺序

上篇文章中&#xff0c;我们了解到设计问卷调查问卷的技巧有保持问题中立、少用开放式问题、保持全名平衡的答案集、谨慎设置单一回答。在这篇文章中&#xff0c;我们将继续深入探讨设计问卷调查问题的剩余5大技巧&#xff01; Tip5&#xff1a;注意问题的顺序 虽然您可以任意…

Project DESFT 白皮书中文版——应用于普惠金融的可信数字凭证解决方案

1. 概述 Project DESFT 是由 Solv 基金会与 zCloak Network 联合设计孵化&#xff0c;以跨境贸易和金融服务为场景的分布式可信数字凭证解决方案&#xff08;Distributed Trusted Digital Credential Solution&#xff09;&#xff0c;项目获得新加坡金管局&#xff08;Monetar…

Vsan数据恢复—Vsan分布式存储数据恢复案例

vSAN故障&#xff1a; 一台存储采用了VSAN分布式存储架构&#xff0c;存储内共有24块硬盘存储数据。 这台vSAN存储设备关机重启。经过数据恢复工程师的检测&#xff0c;发现vSAN逻辑架构出现故障&#xff0c;上层虚拟机瘫痪&#xff0c;存储内的数据丢失。 vsan数据恢复过程&am…

【ONE·Linux || 网络基础(四)】

总言 主要内容&#xff1a;传输层UDP、TCP协议基本介绍。UDP报文格式、TCP报文格式、三次握手四次挥手、TCP可靠性策略说明。 文章目录 总言8、UDP协议&#xff08;传输层一&#xff09;8.1、传输层预备知识8.1.1、端口号8.1.2、一些指令&#xff08;netstat、pidof、xargs&am…

ChatGLM2详细安装部署(chatglm2大模型安装步骤三)

ChatGLM2安装部署 1.服务器配置 服务器系统:Centos7.9 x64 显卡:RTX3090 (24G) 虚拟环境:Miniconda3 2.安装部署 2.1 ChatGLM2下载 输入命令:git clone https://github.moeyy.xyz/https://github.com/THUDM/ChatGLM2-6B.git 输入命令:cd ChatGLM2-6B 注:https://g…

TP4066L是一款完整的单节锂离子电池采用恒定电流/恒定电压线性充电器。

TP4066L 采用ESOP8/DFN2*2-8封装 1A线性锂离子电池充电器 描述&#xff1a; TP4066L是一款完整的单节锂离子电池采用恒定电流/恒定电压线性充电器。其底部带有散热片的ESOP8DFN2*2-8封装与较少的外部元件数目使得TP4066L成为便携式应用的理想选择。TP4066L可以适合USB电源和适…

软件工程--面向对象分析用通俗语言20小时爆肝总结!(包含用例图、活动图、类图、时序图......)

面向对象方法分为面向对象分析&#xff08;OOA&#xff09;、面向对象设计&#xff08;OOD&#xff09;、面向对象编程&#xff08;OOP&#xff09;&#xff0c;本文详细介绍面向对象分析 本文参考教材&#xff1a;沈备军老师的《软件工程原理》大多图片来源其中 目录 面向对…

8.二维数组——将一个二维数组行和列的元素互换,存到另一个二维数组中。

文章目录 前言一、题目描述 二、题目分析 三、解题 程序运行代码 前言 本系列为二维数组编程题&#xff0c;点滴成长&#xff0c;一起逆袭。 一、题目描述 将一个二维数组行和列的元素互换&#xff0c;存到另一个二维数组中。 二、题目分析 三、解题 程序运行代码 #incl…

1980-2022年世界各国专利、商标申请数据/世界各国知识产权专利申请数据

1980-2022年世界各国专利、商标申请数据/世界各国知识产权专利申请数据 1、时间&#xff1a;1980-2022年 2、来源&#xff1a;WIPO数据库 3、范围&#xff1a;世界各国&#xff08;180多个国家&#xff09; 4、指标&#xff1a;国家名称、年份、代码、类型、专利申请总量、…

区块链存证:杭州互联网法院备选方案之一

文章目录 背景上报的存证系统设计备选方案***总体原则******分层架构******基础节点******存证链******存证业务******存证接入******通用功能******跨链对接架构***业务流程描述用户发起原创内容存证&#xff08;对应上图中左边1,2,3活动&#xff09;发现侵权行为&#xff0c;…