位置: IT常识 - 正文

Vue3【项目中引入Pinia、组合式API风格、核心概念(State、修改状态、Getters、Actions) 】(十四)-全面详解(学习总结---从入门到深化)(vue引用类型)

编辑:rootadmin
Vue3【项目中引入Pinia、组合式API风格、核心概念(State、修改状态、Getters、Actions) 】(十四)-全面详解(学习总结---从入门到深化)

推荐整理分享Vue3【项目中引入Pinia、组合式API风格、核心概念(State、修改状态、Getters、Actions) 】(十四)-全面详解(学习总结---从入门到深化)(vue引用类型),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:vue引用vue,vue引入插件方法,vue引用d3,vue引入mui,vue引入mui,vue项目引入axios,vue引用d3,vue 引入,内容如对您有帮助,希望把文章链接给更多的朋友!

 

👏作者简介:大家好,我是小童,Java开发工程师,CSDN博客博主,Java领域新星创作者 📕系列专栏:前端、Java、Java中间件大全、微信小程序、微信支付、若依框架、Spring全家桶 📧如果文章知识点有错误的地方,请指正!和大家一起学习,一起进步👀 🔥如果感觉博主的文章还不错的话,请👍三连支持👍一下博主哦 🍂博主正在努力完成2023计划中:以梦为马,扬帆起航,2023追梦人 

目录

为什么要使用 Pinia?

项目中引入Pinia

核心概念-State 

核心概念-修改状态 

 核心概念-Getters

核心概念-Actions 


为什么要使用 Pinia?

Pinia 是 Vue 的存储库,它允许您跨组件/页面共享状态

Pinia 最初是为了探索 Vuex 的下一次迭代会是什么样子,结合了 Vuex 5 核心团队讨论中的许多想法。最终,我们意识到 Pinia 已经 实现了我们在 Vuex 5 中想要的大部分内容,并决定实现它取而代之的是新的建议

与 Vuex 相比,Pinia 提供了一个更简单的 API,具有更少的规范 

官方文档:https://pinia.vuejs.org/

中文文档:https://pinia.web3doc.top/

基本示例 

import { defineStore } from "pinia"export const useCountStore = defineStore("count",{ state:() =>{ return{ count:10 } }})

在组件中使用

<template> <p>Count:{{ store.count }}</p></template><script setup> import { useCountStore } from "../stores/count" const store = useCountStore();</script>项目中引入Pinia

在项目引入 pinia 有两种方案 

1 在创建项目结构时选中 pinia

2 创建项目之后,手动下载安装

项目中安装 

npm install pinia --save

创建store仓库

import { defineStore } from "pinia"export const useCountStore =defineStore("count",{ state:() =>{ return{ count:10 } }})

加载store

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

组件中使用

<template> <h3>Pinia</h3> <p>Count:{{ count }}</p></template><script setup> import { useCountStore } from "../store/count" const { count } = useCountStore();</script>

实时效果反馈

1. 下列代码中,画横线的地方填写的是:

// store/countimport { defineStore } from "pinia"export const useCountStore = defineStore("count",{ state:() =>{ return{ count:10 } }})<template> <h3>Pinia</h3> <p>Count:{{ count }}</p></template><script setup> import { useCountStore } from "___" const { count } = useCountStore();</script>

A store

B vue

C pinia

D store/count

组合式API风格 

如果你很喜欢组合式API的代码风格,我们甚至可以在Store中采用组合式API来实现 

这会让你上手 pinia 更迅速 

import { defineStore } from "pinia"import { reactive } from "vue"export const useUserInfoStore = defineStore('userinfo',() =>{ const userInfo = reactive({ name:"iwen", age:20 }) return { userInfo }})<template> <h3>用户信息</h3> <p>Name:{{ userInfo.name }}</p> <p>Age:{{ userInfo.age }}</p></template><script setup> import { useUserInfoStore } from "../store/userInfo" const { userInfo } = useUserInfoStore()</script>

创建项目同时引入 pinia

通过选择方式安装 pinia

这种方式默认常见出来的就是组合式API风格

核心概念-State 

大多数时候,state 是 store 的核心部分。 我们通常从定义应用程序的状态开始。 在 Pinia 中,状态被定义为返回初始状态的函数 

import { defineStore } from "pinia"export const useCountStore = defineStore("count",{ state:() =>{ return{ count:10 } }})

访问 “state”

使用组合式API

Vue3【项目中引入Pinia、组合式API风格、核心概念(State、修改状态、Getters、Actions) 】(十四)-全面详解(学习总结---从入门到深化)(vue引用类型)

虽然 Composition API 并不适合所有人,但 setup() 钩子可以使在 Options API 中使用 Pinia 更容易。 不需要额外的 map helper!

<template> <h3>Pinia</h3> <p>Count1:{{ count }}</p></template><script setup> import { useCountStore } from "../store/count" const { count } = useCountStore();</script>

选项式API

如果您不使用 Composition API,并且使用的是 computed 、 methods 、...,则可以使用 mapState() 帮助器将状态属性映射为只读计 算属性

<template> <p>Count2:{{ count }}</p> <p>Count2:{{ doubleCount }}</p></template><script>import { mapState } from "pinia"import { useCountStore } from "../store/count"export default { computed:{ ...mapState(useCountStore,{ myOwnName:"count", count:store => store.count, doubleCount(store){ return store.count * 2 } }) }}</script>

实时效果反馈

1. 下列代码中,画横线的地方填写的是:

import { defineStore } from "pinia"export const useCountStore =defineStore("count",{ state:() =>{ return{ count:10 } }})<template> <p>Count2:{{ count }}</p> <p>Count2:{{ doubleCount }}</p></template><script>import { mapState } from "pinia"import { useCountStore } from "../store/count"export default { computed:{ ...mapState(___,{ myOwnName:"count", count:store => store.count, doubleCount(store){ return store.count * 2 } }) }}</script>

A pinia

B vue

C useCountStore

D store

核心概念-修改状态 

在 pinia 中修改状态要比在 vuex 中修改状态简单的多,因为不用引 入额外的概念,直接用 store.counter++ 修改 store 

组合式API 

<template> <h3>Pinia</h3> <p>Count1:{{ store.count }}</p> <button @click="updateClick">修改状态</button></template><script setup> import { useCountStore } from "../store/count" const store = useCountStore(); function updateClick(){ store.count++ }</script>

选项式API

<template> <p>Count2:{{ count }}</p> <p>Count2:{{ doubleCount }}</p> <button @click="updateClick">修改状态</button></template><script> import { mapState,mapWritableState } from "pinia" import { useCountStore } from "../store/count" export default { computed:{ ...mapState(useCountStore,{ myOwnName:"count", count:store => store.count, doubleCount(store){ return store.count * 2 } }), ...mapWritableState(useCountStore,["count"]) }, methods:{ updateClick(){ this.count++ } }}</script>

实时效果反馈

1. 下列代码中,画横线的地方填写的是:

<template> <p>Count2:{{ count }}</p> <p>Count2:{{ doubleCount }}</p> <button @click="updateClick">修改状态</button></template><script> import { mapState,mapWritableState } from "pinia" import { useCountStore } from "../store/count" export default { computed:{ ...mapState(useCountStore,{ myOwnName:"count", count:store => store.count, doubleCount(store){ return store.count * 2 } }), ...___(useCountStore,["count"]) }, methods:{ updateClick(){ this.count++ } }}</script>

A mapState

B mapWritableState

C mapMutation

D mapAction

 核心概念-Getters

Getter 完全等同于 Store 状态的计算值 

import { defineStore } from "pinia"export const useCountStore = defineStore("count",{ state:() =>{ return{ count:10 } }, getters:{ getCount:(state) => "当前Count:"+ state.count }})

组合式API中读取

<template> <h3>Pinia</h3> <p>{{ store.getCount }}</p></template><script setup> import { useCountStore } from "../store/count" const store = useCountStore();</script>

选项式API中读取

<template> <p>{{ getCount }}</p></template><script> import { mapState } from "pinia" import { useCountStore } from "../store/count" export default { computed:{ ...mapState(useCountStore, ["getCount"]) }}</script>

访问其他 getter

getters:{ getCount:(state) => "当前Count:"+ state.count, doubleCount(state){ return this.getCount + state.count }}

实时效果反馈

1. 下列代码中,画横线的地方填写的是:

<template> <p>{{ getCount }}</p></template><script> import { mapState } from "pinia" import { useCountStore } from "../store/count" export default { computed:{ ...mapState(useCountStore,___) }}</script>

A [getCount]

B "getCount"

C getCount

D ["getCount"]

核心概念-Actions 

Actions 相当于组件中的 methods。 它们可以使用 defineStore()中的 actions 属性定义,并且它们非常适合定义业务逻辑 

import { defineStore } from "pinia"export const useCountStore = defineStore("count", { state: () => { return { count: 10 } }, getters: { getCount: (state) => "当前Count:" + state.count, doubleCount(state) { return this.getCount + state.count } }, actions: { increment() { this.count++ }, decrement() { this.count-- } }})

组合式API中读取

<template> <h3>Pinia</h3> <p>Count1:{{ store.count }}</p> <button @click="addCountHandler">增加</button> <button @click="minCountHandler">减少</button></template><script setup> import { useCountStore } from "../store/count" const store = useCountStore(); function addCountHandler(){ store.increment() } function minCountHandler(){ store.decrement() }</script>

选项式API中读取

<template> <p>Count2:{{ count }}</p> <p>Count2:{{ doubleCount }}</p> <button @click="addCountHandler">增加</button> <button @click="minCountHandler">减少</button></template><script>import { mapState,mapActions } from "pinia"import { useCountStore } from "../store/count"export default { computed:{ ...mapState(useCountStore,{ myOwnName:"count", count:store => store.count, doubleCount(store){ return store.count * 2 } }) }, methods:{ ...mapActions(useCountStore,["increment","decrement"]), addCountHandler(){ this.increment() }, minCountHandler(){ this.decrement() } }}</script>

实时效果反馈

1. 下列代码中,画横线的地方填写的是:

<template> <p>Count2:{{ count }}</p> <p>Count2:{{ doubleCount }}</p> <button @click="addCountHandler">增加</button> <button @click="minCountHandler">减少</button></template><script> import { mapState,mapActions } from "pinia" import { useCountStore } from "../store/count" export default { computed:{ ...mapState(useCountStore,{ myOwnName:"count", count:store => store.count, doubleCount(store){ return store.count * 2 } }) }, methods:{ ...___(useCountStore,["increment","decrement"]), addCountHandler(){ this.increment() }, minCountHandler(){ this.decrement() } }}</script>

A mapState

B mapGetter

C mapMutation

D mapActions

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

上一篇:win11系统中怎样开启无线投屏? win11添加无线显示器的技巧(win11系统中怎样调整office底色)

下一篇:微软 New Bing AI 申请与使用保姆级教程(免魔法)(微软 new bing 广告收入)

  • 华为nova9怎么设置横屏(华为nova9怎么设置锁屏壁纸)

    华为nova9怎么设置横屏(华为nova9怎么设置锁屏壁纸)

  • oppo怎么传输数据到新的手机上(oppo怎么传输数据到苹果手机上)

    oppo怎么传输数据到新的手机上(oppo怎么传输数据到苹果手机上)

  • 华为手机连接电脑怎么传输文件和照片(华为手机连接电脑怎么连接)

    华为手机连接电脑怎么传输文件和照片(华为手机连接电脑怎么连接)

  • 手机微信清理了缓存,聊天记录还在吗(手机微信清理了怎么恢复)

    手机微信清理了缓存,聊天记录还在吗(手机微信清理了怎么恢复)

  • 苹果xsmax耳机孔在哪(xsmax的耳机孔在哪里)

    苹果xsmax耳机孔在哪(xsmax的耳机孔在哪里)

  • 支付宝电子照片怎么弄(支付宝电子照片用手机怎么照)

    支付宝电子照片怎么弄(支付宝电子照片用手机怎么照)

  • 华为mate10如何下载应用(华为mate10rom下载专区)

    华为mate10如何下载应用(华为mate10rom下载专区)

  • 网易云音乐桌面歌词怎么移动(网易云音乐桌面壁纸怎么设置)

    网易云音乐桌面歌词怎么移动(网易云音乐桌面壁纸怎么设置)

  • 未绑定有效的安全认证设备(提示未绑定有效的安全设备)

    未绑定有效的安全认证设备(提示未绑定有效的安全设备)

  • 微信被动一天加300人会封吗(微信被动一天加500人会封吗)

    微信被动一天加300人会封吗(微信被动一天加500人会封吗)

  • 美版苹果7卡贴激活教程(美版苹果卡贴机可以升级系统吗)

    美版苹果7卡贴激活教程(美版苹果卡贴机可以升级系统吗)

  • 录音发微信怎么发(录音发微信怎么打开)

    录音发微信怎么发(录音发微信怎么打开)

  • 苹果x原装带不带耳机(苹果x原装都带什么东西)

    苹果x原装带不带耳机(苹果x原装都带什么东西)

  • 微信视频号好友看得到吗(微信视频号好友点赞怎么关闭)

    微信视频号好友看得到吗(微信视频号好友点赞怎么关闭)

  • 苹果手机把别人拉黑了还能收到短信吗(苹果手机把别人手机号阻止来电号码对方还能发短信吗)

    苹果手机把别人拉黑了还能收到短信吗(苹果手机把别人手机号阻止来电号码对方还能发短信吗)

  • 运算器由什么组成(运算器由什么组成部分)

    运算器由什么组成(运算器由什么组成部分)

  • ltps是lcd吗(ltps和lcd有什么区别)

    ltps是lcd吗(ltps和lcd有什么区别)

  • dps文件在手机里怎么打开(手机怎么把dps文件转化成ppt)

    dps文件在手机里怎么打开(手机怎么把dps文件转化成ppt)

  • 什么是幼儿编程(什么是幼儿编程教育视频)

    什么是幼儿编程(什么是幼儿编程教育视频)

  • 苹果耳机二代什么时候出(苹果耳机二代什么型号)

    苹果耳机二代什么时候出(苹果耳机二代什么型号)

  • oppo256g手机有哪些(oppo手机256g手机有哪些)

    oppo256g手机有哪些(oppo手机256g手机有哪些)

  • 华为p30一键锁屏在哪(华为mate50一键锁屏怎么设置)

    华为p30一键锁屏在哪(华为mate50一键锁屏怎么设置)

  • 云线怎么画(cad图纸云线怎么画)

    云线怎么画(cad图纸云线怎么画)

  • 初装费包括什么
  • 进口货物复合计税的应税消费品包括
  • 食用油交不交消费税
  • 适用5%征收率的范围
  • 财务报表分析五种方法
  • 筹建期间购买的机械配件
  • 增值税报表填写说明
  • 新企业所得税法规定的企业所得税基本税率
  • 货到发票没到
  • 固定资产贷款利率
  • 办公室的取暖费怎么做会计分录
  • 服务费可以不退吗
  • 专用发票红冲后可以退税吗?
  • 报价表含税点是什么意思?
  • 企业所得税 税法
  • 代开的专票开错了怎么办?
  • 旅行社开的发票是否都要差额征税
  • 土地使用税计税依据及计算方式
  • linux 卸载vmware
  • 股东借钱给公司怎么写借条
  • php两个多维数组合在一起
  • 服务成本怎么处理
  • 关于汇算清缴的问题
  • 出售无形资产的净损失不应计入
  • 苹果最小的充电器是哪一款
  • 酒店免费提供哪些服务
  • 软件和集成电路杂志官网
  • 前端批量下载图片
  • 建筑安装企业核定征收企业所得税
  • 阿里云phpstudy
  • ChatGPT会让6个低端岗位失业
  • 傅里叶变换的过程
  • 与取得收入无关的费用支出可以扣除吗
  • 财政补助结转的会计科目
  • 进口商品销售的会计分录
  • 残疾人保证金怎么报税
  • 充油卡 发票
  • c语言中有哪些语句
  • 批量替换多个word文档的同一内容
  • 进项税额已经抵扣
  • 残疾人就业保障金是什么意思啊
  • 固定资产清理借方表示什么意思
  • 上年结转库存现金会计分录
  • mysql proxy问题的解决方法
  • 采用权益法核算的长期股权投资时,对于被投资企业
  • 其他债权投资应收利息计入什么
  • 个体的个人所得税怎么交税?
  • 营业收入的核算方式有哪些
  • 预付卡销售成品油会计分录
  • 政府补贴的装修费是免税的吗
  • 已经认证抵扣的发票,要退回,怎么处理
  • 企业年金个税怎么计算
  • 预缴的所得税怎么申请退税
  • 商品买一送一应该怎么写
  • 免征的教育费附加怎么做账
  • 收到上市公司分红企业所得税减半征收的情景
  • 什么是大病医疗救助
  • 设备基础属于什么基础
  • 库存商品核算流程是怎样的
  • 什么计提折旧什么不计提折旧
  • win71
  • win7怎么打开程序
  • 微软今天正式停产了吗
  • ubuntu tcp
  • 设置使用资源管理器查看文件时,显示已知文件的扩展名
  • window10h2
  • window10 蓝牙鼠标
  • Win7系统安装教程
  • js获取json数组中的值
  • 深入分析的成语
  • excel实现多选
  • 第一个安卓项目
  • perl处理特殊符号
  • jquery获取当前元素是第几个元素
  • 税务总局33号公告
  • 济南槐荫税务局办税大厅电话
  • 北京市国家税务局发票查询平台
  • 传统服务贸易和新兴服务贸易如何区分
  • 济南社保减免政策2020通知
  • 国企划拨用地改制处置
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设