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

Vue3组件间通信——pinia

pinia简介:

        pinia是一项vue官方推荐的组件间通信方式,适用于任意组件之间,实现数据的共享。基本功能类似于vuex,但相较于vuex,pinia适用不会产生偏离vue的感觉,存储更为直观。

在vue3里面pinia就是vuex的继任者。

pinia的安装和配置:

        Pinia 是 Vue 的一个状态管理插件,所有要先安装第三方包,然后进行配置才能使用:

    1、安装:

npm install pinia

    2、main.ts中的配置:

import { createApp } from 'vue'
import App from './App.vue'// 引入pinia
import {createPinia} from 'pinia'// 创建pinia实例
let pinia = createPinia()
const app = createApp(App)// 使用pinia
app.use(pinia)
app.mount('#app')

pinia的基本使用:

        pinia的基本使用流程:对于每一个用到了共享数据的.vue组件,就创建一个对应的存储文件到src/store目录下,如 button.vue组件定义了共享的数据 btnMsg ,其它组件要想使用就必须有一个共享的数据载体引入后再使用,因此创建一个button.ts存储文件,里面存放一些数据和方法,其它组件需要时导入即可。

        1、创建容器:

        每个共享数据的组件都需要创建一个容器在 src/store/下的对应文件里,如 count.vue 需要创建一个 count.ts 文件用来存放他的共享数据。具体当然也可根据情况创建一个没有对应组件的存储文件,存放一些公共数据和方法。

        

        2、容器基本内容的搭建:        

            (1) 引入defineStore:
 import {defineStore} from 'pinia'// 是一个函数,用来创建仓库
           (2) defineStore 的使用:
export const useCountStore = defineStore('count',{state:function(){return {sum:0}}
})

defineStore 的参数:

  • 仓库 ID,以文件名命名即可
  • 配置对象,包含 state(数据)、actions(行为)、getter(类似计算属性)

导出的变量名格式:use[ 你的文件名 ]Store

      3、defineStore 配置项可选配置:

          (1) state:数据:

  返回值为一个对象,对象里面配置需要共享的数据,格式类似vue2的data配置

格式:
state:funciton(){return {data.....}
}
        (2) actions:动作行为:

  每个属性为一个方法,接收一个value参数,里面进行数据的增删改、逻辑判断等操作

格式:
action:{action1:(value)=>{.......},.....
}

  在 actions 里面 pinia 为我们封装好了 this,指向的是当前 store 对象,可以直接 this.pro 调用 state 里面的 pro 数据

        (3) getters:计算属性:

  在组件里面使用的方法和 state 里面的数据一样,直接 存储对象.getters数据 即可调用

格式:
getters:{bigSum:function(state){return state.sum},.....
}

     4、在组件里面使用 pinia 存储的数据:

         (1) 导入需要引入的共享数据的存储文件:
import { useCountStore  }  from '../store/count'
         (2) 使用获取对象:
let countStore = useCountStore()

  输出 countStore(下面以存储对象代称) 可以看到该对象包含了 state 里面定义的数据和一些操作方法(即state\action\getters里面的东西)

  注意:这里使用里面的 ref 数据可以直接使用,不用加 value 了,pinia 为我们自动解包:countStore.sum 即可

     5、修改 pinia 存储的数据:

        在一个使用了 pinia 定义好的仓库共享数据时,有三种方法修改里面 state 数据

         (1) 直接修改:

        需要知道的是,存储对象里面的 state 对应的数据是响应式的,直接修改页面会自动渲染,同时存储文件的 state 对应的数据也会变化

// 第一种:直接修改function add(){countStore.sum += n.value}即:存储对象.statePro = n
         (2) 使用$patch 碎片修改:
// 第二种:使用$patch修改function add(){countStore.$patch({sum: countStore.sum + n.value,copySum:countStore.sum})}即格式如下:
使用:
存储对象.$patch({要修改的 state 数据 1:新的值,....
})
         (3) 借助存储文件里面配置好的 actions 进行修改:

        适用于一些复杂的带有逻辑判断和接口调用的修改

function add(){countStore.increment(n.value)        // 这里increment是count.ts里面actions里面配置好的方法
}格式:存储对象.actions 里面配置好的行为方法(value)

     6、组件使用存储对象里面的数据的简写形式:

      正常情况下如果想在模板里面使用共享数据,就需要 存储对象.数据 的形式调用,数据多时就太麻烦了,所以可以在 setup 里面先进行解构,把数据分别赋给对应简单变量,如下所示:

但有一个缺点,就是在 toRefs(存储对象)的时候会把方法也给解析出来,就浪费效率:

 所有有了 storeToRefs,其作用和 toRefs 一样,但其不会解析方法,只会解析存储对象里面的数据:

      小总结:pinia的数据不用toRefs,使用storeToRefs工具函数

      7、$subscribe的基本使用:

        作用:存储对象身上的一个方法,用来监视存储对象保存的数据的变化

        格式:

storeObj.$subScribe((mutate,state)=>{console.log("storeObj 里面的数据被修改了")........
}) 

     mutate 记录了一些基本但没啥用的信息

     state 记录了哪些数据属性被修改了

周总结:

        本周收获颇丰:

  • 首先是把vue3和vue2搞明白了,学了很多vue3里面的新API的使用,特别是把setup函数和setup语法糖里面的API差异学习了一下。
  • 其次学习了Element-plus的使用,做了一点小案例,还挺好用的,就是语法有点多,做项目的时候按需使用吧。
  • 然后就是学了一下uniapp的使用,做小程序还挺方便的,但没有深度学习,以后抽时间深度学习一下吧,应该不难,看可多都是vue的语法,然后加了一下自己的配置。

        下周计划:

        下周就要开始做项目了,要提起精神了。复习一下vue3的语法API什么的,学习一下项目搭建,找找资源库和好看的网站,现在界面写的不好看,要改善一下ui能力。

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

相关文章:

  • php零基础做网站网站没后台怎么修改类容
  • 郑州做网站狼牙建立网站的链接结构有哪几种形式?
  • RTL8762KD_EVB_Board-嘉立创EDA设计
  • 西安网站制作公司怎么选宁波企业做网站哪家好
  • 手机网站开发算什么费用seo服务外包价格
  • 在 ​CentOS 7​ 的 Linux 系统中配置 ​NFS
  • 网站欣赏网站整合营销传播成功案例
  • 深圳高端网站设计建设网站推广百度优化
  • React Native 项目实战指南
  • 百度品牌网站建设优化大师如何删掉多余的学生
  • 做平面设计的一般浏览什么网站wordpress自定义文章顺序
  • 打造推理模型的4种方法——李宏毅2025大模型课程第7讲
  • 金融行业客服系统中合规高效的身份验证流程分享
  • 网站服务器怎么维护濮阳网站建设在哪里
  • 四川省住房和城乡建设厅网站官网西安做网站缑阳建
  • linux——有关权限的话题。——权限掩码——默认文件权限的理解/文件共享、粘滞位
  • 【经典书籍】《人月神话》第四章“贵族专制、民主政治和系统”精华讲解
  • 南京高端网站定制保定自助建站软件
  • hysAnalyser --- 支持UDP实时流分析和录制功能
  • 葫芦岛做网站的公司微信公众平台导航 wordpress模版
  • 【Linux笔记】网络部分——网络层IP协议
  • 用织梦做的网站怎么上传虚拟网站新建设请示
  • GEE统计特定区域特定时间上的Landsat/Sentinel的影像信息
  • 徐州建设企业网站苏州网站优化排名推广
  • 百度提交网站的入口地址网络地区广告代理
  • 全面认识 InnoDB:从架构到 Buffer Pool 深入解析
  • TREE SEARCH FOR LLM AGENT REINFORCEMENTLEARNING
  • 网站建设分金手指排名二八铜川矿业公司网站
  • 阿里云网站建设需要多少钱cms在线
  • 把AI“编”进草垫:1KB决策树让宠物垫自己报「如厕记录」