位置: IT常识 - 正文

Vue | Vue.js 全家桶 Pinia状态管理(vue全家桶的app项目代码)

编辑:rootadmin
Vue | Vue.js 全家桶 Pinia状态管理

推荐整理分享Vue | Vue.js 全家桶 Pinia状态管理(vue全家桶的app项目代码),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:vue2.0全家桶,vue2.0全家桶,vue全家桶的app项目代码,vue全家桶教程,vue全局,vue.js 全局运行机制,vue全家桶教程,vue.js 全局运行机制,内容如对您有帮助,希望把文章链接给更多的朋友!

🖥️ Vue .js专栏:Node.js Vue.js 全家桶 Pinia状态管理 🧑‍💼 个人简介:一个不甘平庸的平凡人🍬

✨ 个人主页:CoderHing的个人主页

🍀 格言: ☀️ 路漫漫其修远兮,吾将上下而求索☀️

👉 你的一键三连是我更新的最大动力❤️

目录

一、Pinia和Vuex的对比

什么是Pinia呢?

Pina和Vuex的区别

如何使用Pinia

二、创建Pinia的Store

认识Store

定义一个Store

使用定义的Store

三、Pinia核心概念 State

认识和定义State

操作State(一)

操作State(二)

四、Pinia核心概念 Getters

认识和定义Getters

访问Getters(一)

访问Getters(二)

五、Pinia核心概念 Actions

认识和定义Actions

Actions执行异步操作


一、Pinia和Vuex的对比什么是Pinia呢?

        Pinia开始于2019年,最初作为一个实验为Vue重新设计状态管理,让它用起来像 组合式API(Composition API)

        从那时到现在,最初的设计原则依然相同,并且同时兼容Vue2 Vue3 也不要求你使用 Composition API

        Pinia本质上 依然是一个 状态管理的库 用于 跨组件 页面进行状态共享(和Vuex Redux一样)

Pina和Vuex的区别

        pinia最初是为了探索Vuex的下一次迭代会是什么样的,结合了Vuex5核心团队讨论中的许多想法

        最终,团队意识到Pinia已经实现了Vuex5中大部分内容,所以决定用Pinia来替代Vuex

        与Vuex比,Pinia提供了一个 更简单的API 具有更少的仪式,提供了CompositionAPI风格的API

        最重要的是,与TypeScript一起使用时具有可靠的类型推断支持;

和Vuex相比,Pinia有很多的优势:

        如:mutation不再存在:

                经常被认为是 非常冗长; 最初带来了devtools集成,但这不再是问题.

        更友好的TypeScript支持,Vuex之前对TS的支持不是很友好

        不再有modules的嵌套结构:

                可以灵活使用每一个store,是通过扁平化的方式来相互使用的

        不再有命名空间的概念,不需要记住它们的复杂关系

如何使用Pinia

安装Pinia

JavaScript yarn add pinia // or with npm npm i pinia

创建一个pinia并且将其传递给应用程序:

JavaScript import { createPinia } from 'pinia'

const pinia = createPinia()

export default pinia

JavaScript // main.js文件中定义 import pinia from './stores/index'

createApp(App).use(pinia).mount('#app')

二、创建Pinia的Store认识Store

什么是Store?

        一个Store(如pinia)是一个实体,它会持有为绑定到你组件树的状态和业务逻辑,也就是保存了全局的状态;

        有点像始终存在,并且 每个人都可以读取和写入的组件

        可以在你的应用程序中 定义任意数量的Store来管理你的状态

Store有三个核心概念:

        State getters actions

        等同于组件的 data computed  methods

        一旦store被实例化,就可以直接在store上访问state getters 和 actions中定义的任何属性

定义一个Store

定义一个Store:

        需要知道Store是使用defineStore()定义的

        并且需要一个唯一名称,作为第一个参数传递

JavaScript import { defineStore } from 'pinia'

// defineStore 本身的返回值是一个函数// 习惯用useXXX来命名 => 规范 const useCounter = defineStore("counter",{     state:()=> ({         count:999     }) })

export default useCounter

这个name,也称为id 是必要的的,Pinia使用它来将store连接到devtools

返回的函数统一使用useXXX作为命名方案,这是约定的规范

使用定义的Store

Store在它被使用之前是不会创建的,可以通过调用use函数来使用Store

JavaScript <template>   <div class="home">     <h2>Home view</h2>     <h2>count: {{ counterStore.count }}</h2>   </div> </template>

<script setup> import useCounter from '@/stores/counter';

const counterStore = useCounter() </script>

Vue | Vue.js 全家桶 Pinia状态管理(vue全家桶的app项目代码)

<style scoped> </style>

注意Store获取到后不能被解构,不然会失去响应式!

        为了从Store中提取属性同时保持其响应式 需要使用storeToRefs()

三、Pinia核心概念 State认识和定义State

state是store的核心部分,因为store是用来帮助我们管理状态的

在Pinia中,状态被定义为返回初始状态的函数

操作State(一)

读取和写入state:

        默认情况下,可以通过store实例访问状态来直接读取和写入状态

JavaScript const counterStore = useCounter()

counterStore.count++ counterStore.name = "xiong"

重置State:

        可以通过调用store上的$reset()方法将状态 重置 到其初始值;

JavaScript const counterStore = useCounter() counterStore.$reset()

操作State(二)

改变State:

        除了直接使用store.counter++修改store,还可以调用$patch方法

        它允许你使用部分"state"对象 同时应用多个更改

JavaScript function changeStateClick(){     // 1 一个一个修改状态     // userStore.name = "xiaoxiong"     // userStore.age = 18     // userStore.level = 9999

    // 2 一次性修改多个状态     userStore.$patch({       name:"xx",       age:20     })   }

替换State:

        可以通过将其$state属性设置为新对象来替换Store的整个状态

JavaScript counterStore.$state = {     counter:1,     name:"xxiong" }

四、Pinia核心概念 Getters认识和定义Getters

Getters相当于Store的计算属性:

        可以用defineStore()中的getters属性定义

        getters中可以定义接受一个state作为参数的函数

JavaScript const useCounter = defineStore("counter",{     state:()=> ({         count:999,         friends:[             { id:1,name:"xiong" },             { id:2,name:"xx" },             { id:3,name:"xxiong" },         ]     }),     getters:{         // 1 基本使用         doubleCount(state){             return state.count * 2         },         // 2 一个getter引入另外一个getter         doubleCountAddOne(){             // 通过this访问 this绑定store实例             return this.doubleCount + 1         },         // 3 getters也支持返回一个函数         getFriendById(state){             return function(id) {                 // 高阶js写法                 return state.friends.find(item => item.id === id )

                // 普通写法                 // for(let i = 0;i<state.friends.length;i++){                 //     const friend = state.friends[i]                 //     if(friend.id === id){                 //         return friend                 //     }                 // }             }         },         // 4 getters中使用到别的store中的数据         showMsg(state){             // 展示 count  和 user内的信息             // 在上面 导入 user包             // 1 获取user信息             const useStore = useUser()             // 2 获取自己信息 state

            // 3 拼接信息             return `name:${useStore.name}-count:${state.count}`         }              } })

访问Getters(一)

访问当前Store的Getters:

JavaScript <h2>doubleCount: {{ countStore.doubleCount }}</h2> <h2>doubleCountAddOne: {{ countStore.doubleCountAddOne }}</h2> <h2>friend-2: {{ countStore.getFriendById(2) }}</h2> <h2>拼接counter里面的count和user里面的名字: showMsg:{{ countStore.showMsg }}</h2>

Getters中访问自己的其他Getters:

        可以通过 this来访问到当前store实例的所有其他属性:

JavaScript doubleCountAddOne(){     // 通过this访问 this绑定store实例     return this.doubleCount + 1 },

访问其他store的Getters:

JavaScript// 4 getters中使用到别的store中的数据 showMsg(state){     // 展示 count  和 user内的信息     // 在上面 导入 user包     // 1 获取user信息     const useStore = useUser()     // 2 获取自己信息 state

    // 3 拼接信息     return `name:${useStore.name}-count:${state.count}` }

访问Getters(二)

Getters也可以返回一个函数

JavaScript  // 3 getters也支持返回一个函数 getFriendById(state){     return function(id) {         // 高阶js写法         return state.friends.find(item => item.id === id )

        // 普通写法         // for(let i = 0;i<state.friends.length;i++){         //     const friend = state.friends[i]         //     if(friend.id === id){         //         return friend         //     }         // }     } },

五、Pinia核心概念 Actions认识和定义Actions

Actions相当于组件中的methods

        使用defineStore()中的actions属性定义,且它们非常适合业务逻辑

和getters一样,在actions中可以通过this访问整个store实例的所有操作;

JavaScript actions:{     // 用来定义方法,这里不会给我们传进来一个state,     // 他用来传递参数     increment() {         this.count++     },     // 如:下示例     incrementAdd(num){         this.count += num     } }

Actions执行异步操作

Actions中是支持异步操作的,我们可以编写异步函数,在函数中使用await

JavaScript  actions:{     async fetchHomeMultidata(){         const res = await fetch("http://xxxx:8000/home/")         const data = await res.json()         // console.log(data) // 拿到数据         this.banners = data.data.banner.list         this.recommends = data.data.recommend.list     } }

本文链接地址:https://www.jiuchutong.com/zhishi/296106.html 转载请保留说明!

上一篇:对Transformer中Add&Norm层的理解(transformer中的参数)

下一篇:Win11电源高性能模式怎么开?Win11电源高性能模式设置方法(win11电源高性能模式代码)

  • word图片边框怎么设置(word图片边框怎么加粗)

    word图片边框怎么设置(word图片边框怎么加粗)

  • 怎样删除闲鱼订单(如何删除闲鱼订单)

    怎样删除闲鱼订单(如何删除闲鱼订单)

  • 拼多多直接免拼是(拼多多直接免拼怎么获得)

    拼多多直接免拼是(拼多多直接免拼怎么获得)

  • 手机界面变成黑色怎么办(手机界面变成黑色怎么调回来)

    手机界面变成黑色怎么办(手机界面变成黑色怎么调回来)

  • 微信太阳表情的意思(微信表情包太阳)

    微信太阳表情的意思(微信表情包太阳)

  • vivo手机死机重启不了(vivo手机死机重启方法)

    vivo手机死机重启不了(vivo手机死机重启方法)

  • 如何强制登录别人微信(如何强制登录别人的微信)

    如何强制登录别人微信(如何强制登录别人的微信)

  • 手机怎么换卡怎么取卡(手机怎样换卡)

    手机怎么换卡怎么取卡(手机怎样换卡)

  • 手机月牙图标是什么(手机上显示月牙图标)

    手机月牙图标是什么(手机上显示月牙图标)

  • 虾米音乐下载的歌曲无法播放(虾米音乐下载的音乐在苹果手机的什么地方)

    虾米音乐下载的歌曲无法播放(虾米音乐下载的音乐在苹果手机的什么地方)

  • 华为荣耀9x微信视频怎么美颜(华为荣耀9X微信分身在哪里)

    华为荣耀9x微信视频怎么美颜(华为荣耀9X微信分身在哪里)

  • AirPodspro突然有吱吱的声音(AirPodspro突然有杂音)

    AirPodspro突然有吱吱的声音(AirPodspro突然有杂音)

  • 为什么qq自动回复有时不回复(为什么qq自动回复不起作用)

    为什么qq自动回复有时不回复(为什么qq自动回复不起作用)

  • c语言编译后生成什么文件(c语言编译后生成什么程序连接后生成什么程序)

    c语言编译后生成什么文件(c语言编译后生成什么程序连接后生成什么程序)

  • pc机属于什么计算机(pc机是指())

    pc机属于什么计算机(pc机是指())

  • switch主机模式怎么调音量

    switch主机模式怎么调音量

  • iphone手机自动亮度怎么关(苹果手机自动亮起来)

    iphone手机自动亮度怎么关(苹果手机自动亮起来)

  • 苹果xmax上网慢怎么解决(iphonex网络超级慢)

    苹果xmax上网慢怎么解决(iphonex网络超级慢)

  • 华为mate30可以设置几个指纹(华为mate30可以设置望远镜吗)

    华为mate30可以设置几个指纹(华为mate30可以设置望远镜吗)

  • 嘀嗒顺风车能不能开发票(嘀嗒顺风车能不按路线走吗)

    嘀嗒顺风车能不能开发票(嘀嗒顺风车能不按路线走吗)

  • 快手和快手极速版有什么区别(快手和快手极速版是一个账号吗)

    快手和快手极速版有什么区别(快手和快手极速版是一个账号吗)

  • wlan和wifi的区别(wlan和wifi的区别ipad哪个好)

    wlan和wifi的区别(wlan和wifi的区别ipad哪个好)

  • word顶端有一条横线怎么办(word顶端有一条虚线怎样删除)

    word顶端有一条横线怎么办(word顶端有一条虚线怎样删除)

  • 一加7pro有5g吗(一加7pro手机是5g吗)

    一加7pro有5g吗(一加7pro手机是5g吗)

  • Linux编程时出现Segmentation fault错误如何解决?(linux运行后出现乱码)

    Linux编程时出现Segmentation fault错误如何解决?(linux运行后出现乱码)

  • Win7系统Windows资源管理器老重启的解决方法(win7资源管理器叫什么)

    Win7系统Windows资源管理器老重启的解决方法(win7资源管理器叫什么)

  • 附加税申报表怎么做
  • 小规模多计提增值税税率
  • 环保税的纳税义务人是施工方还是建设方安徽
  • 生产成本和制造费用的账务处理
  • 企业所得税的亏损怎么弥补
  • 税控盘清卡失败
  • 变更税务法人需要怎么办
  • 水利建设专项收入的税率是多少?
  • 法人存到公司账户的钱怎么记账
  • 电子行程单自己打印
  • 2019印花税减免
  • 非居民税收征管方式包括
  • 协会会费支出计什么科目
  • 出纳如何登账
  • 通讯费要计入应付账款吗
  • 月结发票与实缴发票可以一起报销吗
  • 注册资本的变更
  • 发票所有联次都需要加盖发票章吗
  • 航天开票系统清单流程
  • 退役士兵创业就业政策
  • 出售专利权属于什么科目
  • 售后服务领用材料分录
  • 用友加密狗可以拔下来么
  • 现金收付业务流程图
  • 某公司购入一台需要安装的生产设备
  • 应交税费核算
  • linux wget命令详解
  • window10的帮助与支持窗口在哪
  • 网页浏览器字体颜色怎么改
  • 留底税额怎么分录
  • 如何申请税务发票
  • 抵扣给供货商预缴税款
  • 代理进口货物账务怎么处理
  • 怎么更改定位位置信息
  • 存货周转材料报废处理会计分录
  • 销售使用过的固定资产可以开专票吗
  • 公积金的扣款怎么取消
  • php 上传
  • 不带息票据按面值入账
  • 调整以前年度损益调整分录费用调增
  • 外贸企业出口免税政策
  • 期末存货资产结存金额
  • 除了增值税发票还有什么票可以抵扣税
  • 企业收入总额的计算公式
  • php登录不了
  • 2022年最新苹果平板电脑
  • 收入少收钱账务处理
  • mysql导出结果
  • windows安装mq
  • 水灾期间未生产怎么处理
  • 四种股利分配政策及适用情况
  • 不抵扣的进项税额用不用转出
  • 库存商品出库分类
  • 商业折扣影响销售成本吗
  • 其他应收款增加现金流量表怎么填
  • 营改增后建筑企业财务核算
  • 一般纳税人报税流程详细操作
  • 管理费用冲减其他应付款分录
  • 内账会计有法律风险吗
  • 可转换公司债券名词解释
  • 事业单位发放生育津贴从哪年执行的
  • 免征增值税还要计提附加税吗
  • sql server中数据类型怎么用
  • mysql中建表
  • sql语句重复
  • 怎么停止u盘自动运行
  • win7 64位运行软件提示MSCOMCTL.OCX丢失或无效该怎么办?
  • 抢先体验的游戏可以退款吗
  • WARNING: /tmp: File system full, swap space limit exceeded的解决办法
  • win10 20h2怎么装
  • extjs 3.31 TreeGrid实现静态页面加载json到TreeGrid里面
  • jquery实现表单验证
  • 杂志内页广告
  • Node.js中的事件循环是什么
  • python中字典怎么用
  • 开源 android 播放器
  • 512到底是什么意思
  • 全资子公司和全资子企业的区别
  • 5种方式教你如何查询
  • 南京市高新园区
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设