当前位置: 首页 > news >正文

vue 搭建 pinia

文章目录

  • 环境设置
  • 存储+读取数据
  • 【 storeToRefs】借助storeToRefs将store中的数据转为ref对象,方便在模板中使用
  • 【getters】当state中的数据,需要经过处理后再使用时,可以使用getters配置
  • 【$subscribe】通过 store 的 $subscribe() 方法侦听 state`及其变化
  • store组合式写法

环境设置

作用:简单来说(有了一个新的存储数据和方法的空间)
第一步:npm install pinia

第二步:操作src/main.ts

import { createApp } from 'vue'
import App from './App.vue'/* 引入createPinia,用于创建pinia */
import { createPinia } from 'pinia'/* 创建pinia */
const pinia = createPinia()
const app = createApp(App)/* 使用插件 */{}
app.use(pinia)
app.mount('#app')

此时开发者工具中已经有了pinia选项
在这里插入图片描述

存储+读取数据

  1. Store是一个保存:状态业务逻辑 的实体,每个组件都可以读取写入它。

  2. 它有三个概念:stategetteraction,相当于组件中的: datacomputedmethods

  3. 具体编码:src/store/count.ts
    (就是有一个文件可以进行 存储数据,操作数据方法,)

// 引入defineStore用于创建store
import {defineStore} from 'pinia'// 定义并暴露一个store
export const useCountStore = defineStore('count',{// 动作actions:{},// 状态state(){return {sum:6}},// 计算getters:{}
})
  1. 具体编码:src/store/talk.ts
// 引入defineStore用于创建store
import {defineStore} from 'pinia'// 定义并暴露一个store
export const useTalkStore = defineStore('talk',{// 动作actions:{},// 状态state(){return {talkList:[{id:'yuysada01',content:'你今天有点怪,哪里怪?怪好看的!'},{id:'yuysada02',content:'草莓、蓝莓、蔓越莓,你想我了没?'},{id:'yuysada03',content:'心里给你留了一块地,我的死心塌地'}]}},// 计算getters:{}
})
  1. 组件中使用state中的数据
<template><h2>当前求和为:{{ sumStore.sum }}</h2>
</template><script setup lang="ts" name="Count">// 引入对应的useXxxxxStore	import {useSumStore} from '@/store/sum'// 调用useXxxxxStore得到对应的storeconst sumStore = useSumStore()
</script>
<template><ul><li v-for="talk in talkStore.talkList" :key="talk.id">{{ talk.content }}</li></ul>
</template><script setup lang="ts" name="Count">import axios from 'axios'import {useTalkStore} from '@/store/talk'const talkStore = useTalkStore()
</script>

【 storeToRefs】借助storeToRefs将store中的数据转为ref对象,方便在模板中使用

  • 借助storeToRefsstore中的数据转为ref对象,方便在模板中使用。
  • 注意:pinia提供的storeToRefs只会将数据做转换,而VuetoRefs会转换store中数据。
<template><div class="count"><h2>当前求和为:{{sum}}</h2></div>
</template><script setup lang="ts" name="Count">import { useCountStore } from '@/store/count'/* 引入storeToRefs */import { storeToRefs } from 'pinia'/* 得到countStore */const countStore = useCountStore()/* 使用storeToRefs转换countStore,随后解构 */const {sum} = storeToRefs(countStore)
</script>

【getters】当state中的数据,需要经过处理后再使用时,可以使用getters配置

  1. 概念:当state中的数据,需要经过处理后再使用时,可以使用getters配置。

  2. 追加getters配置。

// 引入defineStore用于创建store
import {defineStore} from 'pinia'// 定义并暴露一个store
export const useCountStore = defineStore('count',{// 动作actions:{/************/},// 状态state(){return {sum:1,school:'atguigu'}},// 计算getters:{bigSum:(state):number => state.sum *10,upperSchool():string{return this. school.toUpperCase()}}
})

组件中读取数据:

const {increment,decrement} = countStore
let {sum,school,bigSum,upperSchool} = storeToRefs(countStore)

【$subscribe】通过 store 的 $subscribe() 方法侦听 state`及其变化

talkStore.$subscribe((mutate,state)=>{console.log('LoveTalk',mutate,state)localStorage.setItem('talk',JSON.stringify(talkList.value))
})

store组合式写法

import {defineStore} from 'pinia'
import axios from 'axios'
import {nanoid} from 'nanoid'
import {reactive} from 'vue'export const useTalkStore = defineStore('talk',()=>{// talkList就是stateconst talkList = reactive(JSON.parse(localStorage.getItem('talkList') as string) || [])// getATalk函数相当于actionasync function getATalk(){// 发请求,下面这行的写法是:连续解构赋值+重命名let {data:{content:title}} = await axios.get('https://api.uomg.com/api/rand.qinghua?format=json')// 把请求回来的字符串,包装成一个对象let obj = {id:nanoid(),title}// 放到数组中talkList.unshift(obj)}return {talkList,getATalk}
})

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 14.爬虫---Selenium 经典动态渲染工具的使用
  • MATLAB基础应用精讲-【数模应用】RFM模型
  • 若依vue集成electron实现打包exe应用程序
  • 自建搜索引擎-基于美丽云
  • 法律智能的新纪元:Transformer模型在智能法律咨询的突破性应用
  • 苹果笔记本电脑能玩哪些游戏 苹果电脑可以玩的单机游戏推荐
  • Hospital Management System v4.0 SQL 注入漏洞(CVE-2022-24263)
  • 使用ssh服务器管理远程主机
  • MAVAE
  • Mac系统清理工具:您的数字生活杂务处理师
  • 【JVM基础篇】Java的四种垃圾回收算法介绍
  • ‘wget‘ 不是内部或外部命令,也不是可运行的程序
  • U-net和U²-Net网络详解
  • 华为HCIP Datacom H12-821 卷33
  • 顺序结构 ( 三 ) —— 常量和变量 【互三互三】
  • 【个人向】《HTTP图解》阅后小结
  • android图片蒙层
  • Angular4 模板式表单用法以及验证
  • express.js的介绍及使用
  • React系列之 Redux 架构模式
  • uva 10370 Above Average
  • vue-cli3搭建项目
  • -- 查询加强-- 使用如何where子句进行筛选,% _ like的使用
  • 翻译:Hystrix - How To Use
  • 技术:超级实用的电脑小技巧
  • 来,膜拜下android roadmap,强大的执行力
  • 批量截取pdf文件
  • 前端相关框架总和
  • 时间复杂度与空间复杂度分析
  • 吐槽Javascript系列二:数组中的splice和slice方法
  • 数据库巡检项
  • ​Redis 实现计数器和限速器的
  • ​二进制运算符:(与运算)、|(或运算)、~(取反运算)、^(异或运算)、位移运算符​
  • ​渐进式Web应用PWA的未来
  • #define、const、typedef的差别
  • #Z2294. 打印树的直径
  • #常见电池型号介绍 常见电池尺寸是多少【详解】
  • #我与Java虚拟机的故事#连载03:面试过的百度,滴滴,快手都问了这些问题
  • $redis-setphp_redis Set命令,php操作Redis Set函数介绍
  • (3)STL算法之搜索
  • (Java岗)秋招打卡!一本学历拿下美团、阿里、快手、米哈游offer
  • (leetcode学习)236. 二叉树的最近公共祖先
  • (Matlab)遗传算法优化的BP神经网络实现回归预测
  • (pytorch进阶之路)扩散概率模型
  • (层次遍历)104. 二叉树的最大深度
  • (二)正点原子I.MX6ULL u-boot移植
  • (原創) 博客園正式支援VHDL語法著色功能 (SOC) (VHDL)
  • .FileZilla的使用和主动模式被动模式介绍
  • .Net 代码性能 - (1)
  • .net 中viewstate的原理和使用
  • .NET 中使用 Mutex 进行跨越进程边界的同步
  • .NET/C# 获取一个正在运行的进程的命令行参数
  • .net8.0与halcon编程环境构建
  • .NET是什么
  • .NET中分布式服务