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

  • 荣耀60怎么升级鸿蒙系统2.0(荣耀60怎么升级magicui6.0)

    荣耀60怎么升级鸿蒙系统2.0(荣耀60怎么升级magicui6.0)

  • 苹果电池健康功能在哪(苹果电池健康功能在哪里)

    苹果电池健康功能在哪(苹果电池健康功能在哪里)

  • 钉钉收不到视频会议邀请(钉钉收不到视频会议邀请别人都收到了)

    钉钉收不到视频会议邀请(钉钉收不到视频会议邀请别人都收到了)

  • 苹果平板5代上市时间(iphone平板5代)

    苹果平板5代上市时间(iphone平板5代)

  • pdf能直接打印出来吗(pdf直接打印出来的是乱码怎么解决)

    pdf能直接打印出来吗(pdf直接打印出来的是乱码怎么解决)

  • honor7x怎么隐藏软件(honor7怎么隐藏软件)

    honor7x怎么隐藏软件(honor7怎么隐藏软件)

  • 充电宝能给充电宝充电吗(充电宝)

    充电宝能给充电宝充电吗(充电宝)

  • 刷抖音右下角出现好友头像(刷抖音右下角出现广告)

    刷抖音右下角出现好友头像(刷抖音右下角出现广告)

  • 抖音名字多久可以改一次(抖音名字多久能改)

    抖音名字多久可以改一次(抖音名字多久能改)

  • 滴滴注销账号后还能重新注册吗(滴滴注销账号后车辆也注销了吗)

    滴滴注销账号后还能重新注册吗(滴滴注销账号后车辆也注销了吗)

  • 抖音不允许在车上直播吗(抖音视频不让上dou+)

    抖音不允许在车上直播吗(抖音视频不让上dou+)

  • 飞鸽互联验证失败怎么回事(飞鸽互联注册失败是什么原因)

    飞鸽互联验证失败怎么回事(飞鸽互联注册失败是什么原因)

  • 苹果笔充电(苹果笔充电方式)

    苹果笔充电(苹果笔充电方式)

  • word添加页码怎么设置(word添加页码怎么都是1)

    word添加页码怎么设置(word添加页码怎么都是1)

  • 手机号绑定淘宝号怎样解除(手机号绑定淘宝账号)

    手机号绑定淘宝号怎样解除(手机号绑定淘宝账号)

  • soul怎么隐身状态(soul如何隐身)

    soul怎么隐身状态(soul如何隐身)

  • 无锡地铁怎么手机支付(无锡地铁站怎么扫码乘地铁)

    无锡地铁怎么手机支付(无锡地铁站怎么扫码乘地铁)

  • 手机卡怎么升级5g(手机卡怎么升级4g)

    手机卡怎么升级5g(手机卡怎么升级4g)

  • 手机怎么关掉蓝光(手机怎么关掉蓝牙耳机拨号功能)

    手机怎么关掉蓝光(手机怎么关掉蓝牙耳机拨号功能)

  • 手机上面有个眼睛的标志是啥意思(手机上面有个眼是什么)

    手机上面有个眼睛的标志是啥意思(手机上面有个眼是什么)

  • 微信电话怎么看谁挂的(微信电话怎么看是谁先挂的)

    微信电话怎么看谁挂的(微信电话怎么看是谁先挂的)

  • pr怎么统一视频大小(pr怎么统一加效果)

    pr怎么统一视频大小(pr怎么统一加效果)

  • 软件开发自学还是培训(软件开发自学还是培训好)

    软件开发自学还是培训(软件开发自学还是培训好)

  • nvm安装(windows)(nvme安装win10教程)

    nvm安装(windows)(nvme安装win10教程)

  • AI 杀疯了,NovelAI开源教程(杀疯了出自哪里)

    AI 杀疯了,NovelAI开源教程(杀疯了出自哪里)

  • 无偿划转股份是好是坏
  • 个人所得税是什么
  • 税务检查的定义
  • 收到生育险报销会计怎么写摘要呢
  • 销项发票导出是什么意思
  • 一般纳税人能否享受残保金优惠
  • 滞留票怎么做账务处理
  • 员工交通费属于什么费用
  • 车位出售时要交什么税
  • 转让财产怎么交税
  • 项目规划设计费用取费标准
  • 租赁房屋房产税
  • 在建工程购买的设备计入哪个科目
  • 专用发票报销时限
  • 失控进项发票转出 补税做账
  • 技术服务费可以计入研发费用吗
  • 税控盘的购买流程
  • 其他权益工具包含
  • 债转股的税收政策
  • 净利润等于未分配利润和盈余公积吗
  • 每月结转本年利润会计分录
  • 利润分配属于什么科目
  • 国际重复征税的解决方法公式
  • 若依框架自动生成代码
  • 房产产权置换
  • 工行对公贷款利息扣款时间是几点
  • mysql如果不存在就创建表
  • thinkphp ajaxfileupload实现异步上传图片的示例
  • 结转以前年度本年利润会计分录
  • chat form
  • php 字符串处理函数
  • mlocate.db 删除
  • 微信转账要如何退回去
  • 银行回单打回来会计要做什么
  • 差旅费报销可以直接从公账转到个人账户吗
  • dedecms批量发文章
  • PHPCMS 是 ThinkPHP 开发的吗?
  • 应付现金股利属于什么账户
  • 印花税怎么计提记账
  • 应付职工薪酬的会计科目
  • 增值税加计抵减政策10%和15%
  • 最新版税控盘怎么设置打印机
  • 幼儿园固定资产说明怎么写
  • 退回企业所得税的账务处理
  • 公司租赁办公场所,没发票怎么办
  • 资产报废折旧
  • 计提增值税如何做账
  • 应付票据的概述
  • 其他债权投资有没有减值准备
  • 残保金在网上怎么申报
  • 出纳建账账户名称怎么写
  • 建账需要买哪些会计用品
  • mysql导入sql脚本指定编码
  • 如何获取数据库的sid
  • sqlserver批量执行sql脚本
  • xp复制粘贴功能失效
  • win7超级账户如何启用
  • windf9
  • 微软每月补丁更新一般于什么时间发布
  • 自动保存怎么恢复
  • ubuntu磁盘清理工具
  • ubuntu桌面版安装教程
  • 开源镜像是什么意思
  • linux带桌面
  • /etc/rc.d/rc与/etc/rc.d/init.d的关系介绍
  • linux不能识别u盘
  • 优化linux系统的方法
  • win8metro版桌面安卓下载
  • el-menu-item
  • react-native-modal
  • python中对文件操作的一般步骤
  • unity连接数据库能做什么
  • node和javascript
  • unity 3d代码
  • unity的shader用法
  • JavaScript 事件绑定及深入
  • python语言基本语法
  • 使用jquery实现的项目
  • 15号扣税
  • 债权收购协议书
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设