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

  • 荣耀chl-an00是什么型号(荣耀an00是什么手机)

    荣耀chl-an00是什么型号(荣耀an00是什么手机)

  • 腾讯视频能投屏吗(腾讯视频能投屏到投影仪吗)

    腾讯视频能投屏吗(腾讯视频能投屏到投影仪吗)

  • 华为p40可以安装谷歌GMS吗(华为p40可以安装谷歌三件套吗)

    华为p40可以安装谷歌GMS吗(华为p40可以安装谷歌三件套吗)

  • 华为mate40屏幕有多大(华为mate40屏幕有阴影)

    华为mate40屏幕有多大(华为mate40屏幕有阴影)

  • 华为荣耀9x有计步功能吗(华为荣耀9x计算机怎么查记录)

    华为荣耀9x有计步功能吗(华为荣耀9x计算机怎么查记录)

  • 华为nova4e带不带nfc功能(华为nova4e带不带红外线)

    华为nova4e带不带nfc功能(华为nova4e带不带红外线)

  • 小米m1901f9e是什么型号(m1901f9e是小米什么型号)

    小米m1901f9e是什么型号(m1901f9e是小米什么型号)

  • 此wlan网络使用较旧的安全标准(此wlan网络使用将逐步淘汰的安全标准)

    此wlan网络使用较旧的安全标准(此wlan网络使用将逐步淘汰的安全标准)

  • 抖音显示共同联系人

    抖音显示共同联系人

  • 微信群主自己退群了其他人怎么办(微信群主自己退群,群还存在吗)

    微信群主自己退群了其他人怎么办(微信群主自己退群,群还存在吗)

  • 苹果lla是哪个国家(ll/a是什么版本的苹果手机)

    苹果lla是哪个国家(ll/a是什么版本的苹果手机)

  • 手机投屏没有声音(手机投屏没有声音怎么转换格式)

    手机投屏没有声音(手机投屏没有声音怎么转换格式)

  • 华为lite什么意思(华为liteos用途)

    华为lite什么意思(华为liteos用途)

  • 用录音机可执行文件的类型有(录音机可执行的文件类型有哪些)

    用录音机可执行文件的类型有(录音机可执行的文件类型有哪些)

  • 挂着微信电话闹钟会响吗(打着微信电话闹钟回响吗)

    挂着微信电话闹钟会响吗(打着微信电话闹钟回响吗)

  • oppo支持5g网络的手机(oppo有没有5g手机)

    oppo支持5g网络的手机(oppo有没有5g手机)

  • 手机卡屏是什么原因(手机卡屏是什么问题)

    手机卡屏是什么原因(手机卡屏是什么问题)

  • i7tws耳机怎么连两个(i7tws耳机怎么连接手机)

    i7tws耳机怎么连两个(i7tws耳机怎么连接手机)

  • typec数据线通用吗(typec数据线可以通用吗?)

    typec数据线通用吗(typec数据线可以通用吗?)

  • 淘金币在哪儿看(淘金币哪里查)

    淘金币在哪儿看(淘金币哪里查)

  • 苹果x带无线耳机吗(苹果x无线耳机多少钱正品)

    苹果x带无线耳机吗(苹果x无线耳机多少钱正品)

  • 安卓照片怎么迁移苹果(安卓照片怎么迁移到苹果手机 知乎)

    安卓照片怎么迁移苹果(安卓照片怎么迁移到苹果手机 知乎)

  • 微信挂夜是什么意思(微信挂夜是什么意思啊)

    微信挂夜是什么意思(微信挂夜是什么意思啊)

  • 在python中如何求定积分(在Python中如何求坐标中的任意两个点的距离)

    在python中如何求定积分(在Python中如何求坐标中的任意两个点的距离)

  • 增值税税控开票软件怎么下载
  • 一般纳税人和小规模纳税人哪个合适
  • 企业其他税负率计算公式?
  • 固定资产出售如何申报增值税
  • 劳务报酬需要补税吗
  • 民办非企业免税额度
  • 公司与公司之间的欠款怎么要
  • 营改增后工程税收怎么计算
  • 企业持有到期债券的风险
  • 代扣代缴个人所得税
  • 存货毁损计入
  • 销售时无法确认发票
  • 营改增后商品房销售合同印花税的计税依据是什么?
  • 扣押属于纳税担保吗
  • 奖金计提发放会计分录
  • 公司增资认缴需要什么流程呢怎么办理
  • 营改增后中小企业的税收发生的变化
  • 房地产土地成本计算公式
  • 应收账款未计提坏账,但是确实收不回来
  • 股东的房产无偿提供给公司用
  • 公账转私账可以撤销吗
  • 商标设计人享有著作吗
  • 一次性收取的租金怎么纳税
  • 建筑劳务预缴税款后怎么申报
  • 银行承兑汇票的转让一般通过什么渠道
  • 工会经费如何计提会计分录
  • 如何在win7系统中找到ie浏览器
  • deepin下载教程
  • php文件怎么打开运行
  • 以旧换新方式销售货物的,不得扣除旧货价值
  • php常见字符串函数
  • 税前弥补以前年度亏损分录
  • php 上传文件
  • 酒店押金的账务处理
  • 现金流量表的填列方法
  • php安装不上
  • 每个公司都要交五险一金吗
  • 小规模纳税人差额征收税率是多少
  • sqlserver数据库和mysql区别
  • 国际货运代理企业不得从事的业务是
  • 小企业会计准则和一般企业会计准则的区别
  • 会计准则中规范性的内容
  • 税务局不予受理的依据
  • 金税三期税收管理系统打印控件
  • 材料成本差异的会计分录
  • 资产现金流量收益率为什么不是净利润除以平均现金流量
  • 房租季度付款是几个月
  • 困难补助属于兜底政策吗
  • 临时账户名称是什么意思
  • 不是公司股东的情况说明模板
  • 故意销毁会计凭证、会计账簿罪
  • centos 安装
  • win7系统连接VPN失败时提示错误代码721的故障分析及解决方法
  • window 查看端口
  • linux发布项目
  • win10预览版好吗
  • window8输入法不见了
  • win8 开始
  • linux查看进程并杀死
  • 浅谈特殊儿童的融合教育论文
  • 为什么调用不了函数
  • pygal python
  • perl执行linux命令
  • shell编程之循环语句for与while
  • python 初级
  • nodejs如何使用
  • jquery日历框有长期的选项
  • the oculus rift
  • python语言面向过程吗
  • 发票查验明细怎么截屏
  • 国家税务局总局官网
  • 税务局投诉举报
  • 广西电子税务局怎么报税
  • 江苏省税务局土地增值税清算公告
  • 调查问卷的背景资料怎么写
  • 年终奖发4万扣多少税
  • 腾讯 短信服务
  • 单位首次交社保医疗要多久才能享受
  • 纳服的拼音
  • 煤炭资源税税率选煤税率多少黑龙江
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设