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

Vue状态管理工具pinia的使用以及Vue组件通讯

        状态管理工具redux以及resso和zustand都用过了,这里pinia和resso是一样的,存储的状态数据直接写,方法也是直接写就可以了,会自动进行类型推断。

1.pinia的使用

        首先入口文件引入pinia之后创建pinia对象用use安装pinia和路由一样

import { createApp } from "vue";
import App from './App.vue'
//引入pinia
import { createPinia } from "pinia";
const app =createApp(App)
//创建pinia
const pinia=createPinia()
//安装pinia
app.use(pinia)
app.mount('#app')

        之后创建store文件夹,不同的数据以及数据方法单独创建文件。

        然后用defineStore初始化store容器。

        

        actions写方法,state写数据。

        之后就可以在组件里面引入useCountStore函数调用生成countStore对象就可以引用里面的方法和数据了。

<template><div class="count"><h2>当前求和{{ sum }}</h2><select name="number" id="" v-model="n"><option value="1">1</option><option value="2">2</option></select><button @click="add">增</button><button @click="increase">减</button></div>
</template>
<script setup lang="ts" name="Count">import { ref } from 'vue';import {useCountStore} from '@/store/count'import { storeToRefs } from 'pinia';const countStore=useCountStore()console.log(countStore.sum);let {sum} = storeToRefs(countStore)let n =ref(1)const add=()=>{//第一种修改//countStore.sum=countStore.sum+Number(n.value)//第二种修改 可以一次修改多种数据// countStore.$patch({//     sum:+Number(n.value)// })//第三种修改方式actionscountStore.add(n.value)}const increase=()=>{countStore.sum=countStore.sum-Number(n.value) }//store的监听事件//subscribe回调函数接收两个参数 mutate修改的数据 state就是store存储的数据countStore.$subscribe((mutate,state)=>{console.log('state改变了',mutate,state);})
</script>
<style scoped>.count{background-color: aqua;}select{width: 50px;}button{height: 100px;width: 100px;background-color: aquamarine;color: #000;}
</style>

        还有一个$subscribe可以监听store种的数据变化,mutate第一个参数是变化的数据,state就是存储的所以数据对象。

2.Vue组件通讯的方式、

        包括之前的vue博客,并不是零基础的,是在写过完整的前端项目之后去学的,所以原理大致都是通的,只是方法用法不同。

        这里通讯方式其实和React是相通的,这里只是总结。

        

        这里和react一致。父子和子夫通过props操作。

        分享数据的组件on绑定事件,然后把数据放到回调函数中,然后触发事件的时候把参数传递之后,绑定事件的回调函数就会接收参数。

        记得组件卸载的时候解绑。和pubsub一致

        v-model双向绑定,无非就是把数据绑定到input的value上,然后@input事件发生的时候把value绑定到数据上,和react受控组件一个道理。

        

        父子传递props子没有接收就会放到attrs属性中,可以借此用props传递给孙组件。

        provide提供数据子组件inject拿。子获取父的时候需要父暴露数据,父获取子的实例对象也需要子暴露数据,不然数据是隐藏的。

        

http://www.dtcms.com/a/348032.html

相关文章:

  • 一个byte表示多个bool属性的功能
  • 高并发AI服务部署方案:vLLM、TGI、FastChat性能压测报告
  • CSS 进阶用法
  • Read View是实现MVCC的三大前提之一,那么它是在什么时候建立的
  • frida安装配置及其使用方法
  • 一个奇怪的问题-Python会替代Java吗?技术语言之争的真相-优雅草卓伊凡
  • Java 大视界 -- Java 大数据在智能交通智能公交系统中的乘客流量预测与车辆调度优化
  • 程序里的依赖和中间件的依赖冲突,怎么解决
  • Docling:一个基于AI驱动的免费文档解析工具
  • Python性能优化实战(二):让循环跑得比博尔特还快
  • [身份验证脚手架] 应用布局如何构建
  • 初学python的我开始Leetcode题-16
  • CTFshow系列——命令执行web49-52
  • assert使用方法
  • Redis 高可用开发指南
  • 力扣594:最和谐子序列
  • 客流特征识别误报率↓76%!陌讯多模态时序融合算法在智慧零售的实战解析
  • Tesla智能座舱域控制器(MCU)的系统化梳理
  • 【网络运维】Shell 脚本编程:if 条件语句
  • 【40页PPT】数字工厂一体化运营管控平台解决方案(附下载方式)
  • Spark04-MLib library01-机器学习的介绍
  • SNMP 协议的总结
  • 每日算法题【链表】:相交链表、环形链表、环形链表II
  • 鸿蒙分布式计算实战:用 ArkTS+Worker 池落地可运行任务管理 Demo,从单设备到跨设备全方案
  • [二维前缀和]1277. 统计全为 1 的正方形子矩阵
  • HarmonyOS实战(DevEco AI篇)—深度体验DevEco CodeGenie智能编程助手
  • Function + 枚举 + Map:轻量路由器的最佳实践
  • ERROR 2003 (HY000): Can‘t connect to MySQL server on ‘192.168.24.96‘ (10060)
  • 基于Java、GeoTools与PostGIS的对跖点求解研究
  • 大数据毕业设计选题推荐:基于Spark+Django的学生创业数据分析可视化系统详解 毕业设计/选题推荐/深度学习/数据分析/数据挖掘/机器学习/随机森林