位置: 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 广告收入)

  • wifi已连接不可上网是什么原因呢(wifi已连接不可上网是什么原因)(wifi已连接不可上网是什么原因电脑)

    wifi已连接不可上网是什么原因呢(wifi已连接不可上网是什么原因)(wifi已连接不可上网是什么原因电脑)

  • 美团优选显示待取货是到达了吗(美团优选显示待取货)

    美团优选显示待取货是到达了吗(美团优选显示待取货)

  • ppt如何设置超链接播放视频(ppt如何设置超链接到下一张ppt)

    ppt如何设置超链接播放视频(ppt如何设置超链接到下一张ppt)

  • 拼多多的黑卡怎么用(拼多多的黑卡怎么开通)

    拼多多的黑卡怎么用(拼多多的黑卡怎么开通)

  • XP系统不支持ev录屏系统声

    XP系统不支持ev录屏系统声

  • 钉钉开悬浮窗看抖音算时长吗(钉钉开悬浮窗看视频暂停了怎么办)

    钉钉开悬浮窗看抖音算时长吗(钉钉开悬浮窗看视频暂停了怎么办)

  • 6类网线最远传多少米(6类网线最远传输)

    6类网线最远传多少米(6类网线最远传输)

  • 钉钉能开美颜吗(钉钉可不可以美颜)

    钉钉能开美颜吗(钉钉可不可以美颜)

  • 红包没领删除了钱会退回去吗(红包没领删除了会退回吗)

    红包没领删除了钱会退回去吗(红包没领删除了会退回吗)

  • 京东实名认证审核多久(京东实名审核)

    京东实名认证审核多久(京东实名审核)

  • 手机蓝牙版本哪里查看(蓝牙版本哪个更好)

    手机蓝牙版本哪里查看(蓝牙版本哪个更好)

  • 华为mate30rs保时捷什么时候可以买

    华为mate30rs保时捷什么时候可以买

  • 手机qq2g在线是什么意思(手机qq2g在线是信号不好吗)

    手机qq2g在线是什么意思(手机qq2g在线是信号不好吗)

  • 荣耀6x与畅玩6x的区别(荣耀6x和畅玩6x区别)

    荣耀6x与畅玩6x的区别(荣耀6x和畅玩6x区别)

  • ec6108v9c几种密码(华为悦盒ec6108v9c电信版)

    ec6108v9c几种密码(华为悦盒ec6108v9c电信版)

  • ipad怎么用余额宝(ipad怎么付款)

    ipad怎么用余额宝(ipad怎么付款)

  • 手机后台运行怎么打开(苹果手机14怎么关闭后应用运行)

    手机后台运行怎么打开(苹果手机14怎么关闭后应用运行)

  • 华为手环4e有哪些功能(华为手环4e有什么功能)

    华为手环4e有哪些功能(华为手环4e有什么功能)

  • 说说设置私密怎么取消(说说设置为私密后怎么可见)

    说说设置私密怎么取消(说说设置为私密后怎么可见)

  • 没有网微信运动计步吗(没有网微信运动步数更新吗)

    没有网微信运动计步吗(没有网微信运动步数更新吗)

  • 什么是数字化时代(什么是数字化时代的AI数字员工?)

    什么是数字化时代(什么是数字化时代的AI数字员工?)

  • 无损转mp3后音质变吗(无损转mp3后音质不好)

    无损转mp3后音质变吗(无损转mp3后音质不好)

  • 华为p30特点(华为p30的优点,有哪些特殊功能)

    华为p30特点(华为p30的优点,有哪些特殊功能)

  • pgdn键是什么意思(键盘pgdn键是什么意思)

    pgdn键是什么意思(键盘pgdn键是什么意思)

  • 苹果私密相册设置方法(苹果私密相册如何设置密码)

    苹果私密相册设置方法(苹果私密相册如何设置密码)

  • 花呗如何开通(微信花呗如何开通)

    花呗如何开通(微信花呗如何开通)

  • 配置Webpack Dev Server 实战操作方法步骤(配置windows update)

    配置Webpack Dev Server 实战操作方法步骤(配置windows update)

  • 中级财务管理与注会财务管理
  • 印花税纳税义务人有哪些
  • 非盈利组织免税资格文件
  • 工程款税率是多少专票
  • 股权收购收购方支付的期间损益计入
  • 账面现金可以转出吗
  • 缴纳的增值税在资产负债表中怎么体现
  • 管理费里面可以取现金吗
  • 当月有进项无销项月末怎么处理
  • 公司净资产减少
  • 新企业需要结转增值税吗
  • 对外支付代扣代缴企业所得税
  • 委托加工环节原材料收消费税吗
  • 增值税税率如何计算
  • 退货的发票还能查询到么
  • 公司收到现金货款需要存入银行吗
  • 收到3%的增值税专用发票可以抵扣吗
  • 公司购买商品房可以抵扣增值税吗
  • 小规模纳税人开票要交印花税吗
  • 油票入什么管理费用科目
  • 建安企业劳务成本怎么入账
  • 非房地产企业转让旧房土地增值税
  • 公司账户怎么走账
  • 多计提的冲回如何记账?
  • 进口材料怎么做账
  • 公积金是否计入个人所得税
  • 个人可以做代理吗
  • 公益性捐赠的个税
  • 公司组织的团建受伤算工伤吗
  • 鸿蒙系统怎么设置屏幕不休眠
  • 会计中记账凭证的名词解释
  • 企业所得税纳税调整事项有哪些
  • 企业所得税年报申报时间
  • php getheader
  • 专项储备购买安全设备会计分录
  • vue组件继承并重写属性方法
  • k8s部署ingress-nginx
  • 对于异步电动机国家标准规定3kw
  • php正则表达式匹配,返回原因
  • 2020注册谷歌账号方法
  • modprobe operation not permitted
  • python输入三个数判断能否构成三角形
  • 阿里规则官方头条
  • 为什么开发票能抵税
  • 什么不计入税金及附加
  • 中药饮片盘点误差范围
  • 行政事业单位怎么开发票
  • 建立分公司流程
  • 增值税申报系统登录密码
  • mysql数据库三种复制类型
  • 房产增值税计税依据及计算方式
  • 地价计入房产原值文件解读
  • 购进废旧物资进项税额
  • 免税农产品范围目录的文件
  • 社保怎么交最划算
  • 应收账款周转率计算公式
  • 无形资产如何摊销公式
  • 公务机票保险费能报销吗
  • 会计怎么核对出纳的日记账
  • 管理费怎么扣除
  • sql server日期相减
  • 访问和更改关系的区别
  • win8系统怎么查看隐藏文件
  • win7系统屏幕键盘怎么打开
  • centos pam
  • xp系统与win7系统的电脑怎么组成局域网
  • 微软警告:64位Win7系统或无法安装KB3033929补丁更新
  • linux服务器的mac地址怎么查
  • windows8.1的设置在哪
  • bat批处理命令
  • nodejs基础
  • 原生js import
  • 在unity中单例的主要作用
  • 如何使用nginx
  • python约瑟夫问题最高效算法
  • jquery动态改变样式
  • 10月份税务申报
  • 2022款进口途锐
  • 摩托车的消费税计税依据
  • 荆州区国税局
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设