Vue3学习笔记(下)

文章目录

  • Vue3学习笔记(下)
    • 组合式API下的父子通信
      • 父传子
      • 子传父
    • 模板引用
    • defineExpose()
    • provide和inject
    • vue3新特性 - defineOptions
    • vue3新特性 - defineModel
    • Pinia
      • Pinia异步写法


Vue3学习笔记(下)

组合式API下的父子通信

父传子

基本思想:

  1. 父组件中给子组件绑定属性
  2. 子组件内部通过props选项接收

在这里插入图片描述

注意:由于写了setup,所以无法直接配置props选项,所以,此处需要借助“编译器宏”函数接收子组件传递的数据。

defineProps原理:就是编译阶段的一个标识,实际编译器解析时,遇到后会进行编译转换

在这里插入图片描述

子传父

基本思想:

  1. 父组件中给子组件标签通过@绑定事件
  2. 子组件内部通过emit方法触发事件

在这里插入图片描述

模板引用

概念:通过ref标识获取真实的dom对象或者组件实例对象(可以获取dom,也可以获取组件)

  1. 调用ref函数,生成一个ref对象
  2. 通过ref标识,进行绑定
  3. 通过ref对象.value即可访问到绑定的元素(必须渲染完后才能拿到)

defineExpose()

默认情况下在<script setup>语法糖下组件内部的属性和方法是不开放给父组件访问的,但可以通过defineExppose编译宏指定哪些属性和方法允许访问。

<script setup>
import { ref } from 'vue'
const testMsg = ref('this is msg')
defineExpose({testMsg
})
</script>

provide和inject

作用和场景:顶层组件向任意的底层组件传递数据和方法,实现跨层组件通信。

跨层传递普通数据:

  1. 顶层组件通过provide函数提供数据 —— provide('words', 'abc')
  2. 底层组件通过inject函数获取数据 —— const word = inject('words')

跨层传递响应式数据:

  1. const count = ref(100) provide('count', count)
  2. const count = ('count')

跨层级传递函数:

底层组件如何修改顶层组件的数据:顶层组件给子孙后代传递可以修改数据的方法,底层组件调用。

  1. provide('changeCount', (newValue) => {count.value = newvalue
    })
    
  2. const changeCount = inject('changeCount')
    

vue3新特性 - defineOptions

背景:有<script setup>之前,如果要定义props,emits可以轻而易举地添加一个与setup平级的属性。但是用了<script setup>后,相当于script中所有的代码都写在setup函数里,无法添加与其平级的属性。

为了解决这一问题,引入了defineProps与defineEmits这两个宏,但这只解决了props与emits这两个属性。如果我们要定义组件的name或者其他自定义的属性,还得回到最原始的用法——再添加一个普通的<script>标签。

defineOptions主要是用来定义Options API的选项。可以用defineOptions定义任何选项,props,emits,expose,slots除外(因为这些可以使用defineXXX来做到。

<script setup>
defineOptions({name: 'LoginIndex',inheritAttrs: false,// ...更多自定义属性
})
</script>

vue3新特性 - defineModel

在vue3中,自定义组件上使用v-model,相当于传递一个modelValue属性,同时触发update:modelValue事件。

<script setup>
import sonCom from '@/components/son-com.vue'
import { ref } from 'vue'
const txt = ref('aaabbb')
</script><template><sonCom v-model="txt"></sonCom><div>{{ txt }}</div>
</template><style scoped>
</style>
<script setup>
defineProps({modelValue: String
})
const emit = defineEmits(['update:modelValue'])
</script><template>
<div><input type="text":value="modelValue"@input="e => emit('update:modelValue', e.target.value)">
</div>
</template><style>
</style>

Pinia

Pinia是Vue的最新状态管理工具,是Vuex的替代品。

  1. 提供更加简单的API(去掉了mutation)
  2. 提供符合组合式风格的API(和Vue3新语法统一)
  3. 去掉了modules的概念,每一个store都是一个独立的模块
  4. 配合TypeScript更加友好,提供可靠的类型推断
import { defineStore } from "pinia"
import { ref } from 'vue'
import axios from 'axios'
export const storeModel = defineStore('store', () => {const count = ref(10)const sub = () => { count.value-- }const add = () => { count.value++ } return {count,sub,add}
})
<script setup>
import { storeModel } from '@/store/index'
const store = storeModel() // 此处不能直接解构const { count } = store,会丢失数据的响应式
</script><template><div><h3>Son1组件 - {{ store.count }}</h3><button @click="store.add()">+</button></div>
</template><style scoped></style>

Pinia异步写法

import { defineStore } from "pinia"
import { ref } from 'vue'
import axios from 'axios'
export const storeModel = defineStore('store', () => {const list = ref([])const getlist = async () => {const res =  await axios.get('http://geek.itheima.net/v1_0/channels')list.value = res}return {getlist,list}
})
<script setup>
import { storeModel } from '@/store/index'
const store = storeModel()
store.getlist()
</script>
<template><div>{{ store.list }}</div>
</template>
<style scoped>
</style>

注意:store 是一个用 reactive 包装的对象,这意味着不需要在 getters 后面写 .value。就像 setup 中的 props 一样,我们不能对它进行解构

为了从 store 中提取属性时保持其响应性,需要使用 storeToRefs()。它将为每一个响应式属性创建引用。

<script setup>
import { storeModel } from '@/store/index'
import { storeToRefs } from 'pinia';
const store = storeModel()
const { count } = storeToRefs(store)
</script><template><div><h3>Son1组件 - {{ count }}</h3><button @click="store.add()">+</button></div>
</template><style scoped></style>

注意,我们可以直接从 store 中解构 action,因为它们也被绑定到 store 上。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/886487.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【循环测试试题3】小X与数字三角形

题目描述 读入一个正整数n&#xff0c;输出一个n行的数字三角形。 输入 一行一个正整数n&#xff0c;2<n<10。 输出 共n行&#xff0c;第i行包含i个正整数&#xff0c;每个整数占五列。 样例输入 5 样例输出 12 34 5 67 8 9 1011 12 13 14 …

CNN神经网络

CNN 一 基本概述二 基础知识三 经典案例 今天和大家聊聊人工智能中的神经网络模型相关内容。神经网络内容庞大,篇幅有限本文主要讲述其中的CNN神经网络模型和一些基本的神经网络概念。 一 基本概述 深度学习(Deep Learning)特指基于深层神经网络模型和方法的机器学习。它是在…

React中事件绑定和Vue有什么区别?

1. 绑定方式 React&#xff1a;使用jsx语法&#xff0c;通过属性绑定事件。Vue&#xff1a;使用指令&#xff08;如v-on&#xff09;在模板中直接绑定事件。 2. 事件处理 React&#xff1a;通过合成事件系统封装原生事件&#xff0c;提供统一的API。Vue&#xff1a;直接使用…

MySQL —— MySQL基础概念与常用功能介绍

文章目录 基本概念数据类型数据类型分类 约束主键约束&#xff08;PRIMARY KEY&#xff09;外键约束&#xff08;FOREIGN KEY&#xff09;使用非空约束&#xff08;not null&#xff09;使用唯一性约束&#xff08;UNIQUE&#xff09;使用默认约束&#xff08;DEFAULT&#xff…

如何在react中使用react-monaco-editor渲染出一个编辑器

一、效果展示 二、基于vite配置 1.首先安装react-monaco-editor和monaco-editor包 npm add react-monaco-editor npm i monaco-editor 2.其次创建一个单独的文件&#xff08;此处是tsx、直接用app或者jsx也行&#xff09; import { useState, useEffect } from react impo…

MySQL面试之底层架构与库表设计

华子目录 mysql的底层架构客户端连接服务端连接的本质&#xff0c;连接用完会立马丢弃吗解析器和优化器的作用sql执行前会发生什么客户端的连接池和服务端的连接池数据库的三范式 mysql的底层架构 客户端连接服务端 连接的本质&#xff0c;连接用完会立马丢弃吗 解析器和优化器…

【开源免费】基于Vue和SpringBoot的私人健身与教练预约管理系统(附论文)

本文项目编号 T 618 &#xff0c;文末自助获取源码 \color{red}{T618&#xff0c;文末自助获取源码} T618&#xff0c;文末自助获取源码 随着信息技术和网络技术的飞速发展&#xff0c;人类已进入全新信息化时代&#xff0c;传统管理技术已无法高效&#xff0c;便捷地管理信息…

JVM--内存结构

目录 1. PC Register&#xff08;程序计数器&#xff09; 1.1 定义 1.2 工作原理 1.3 特点 1.4 应用 2.虚拟机栈 2.1定义与特性 2.2内存模型 2.3工作原理 2.4异常处理 2.5应用场景 2.6 Slot 复用 2.7 动态链接详解 1. 栈帧与动态链接 动态链接的作用&#xff1a…

Python 第三方库 PyQt5 的安装

目录 前言 PyQt5安装 不同操作系统PyQt5安装 一、Windows 系统 二、macOS 系统 三、Linux 系统&#xff08;以 Ubuntu 为例&#xff09; 安装 PyQt5 可能会遇到的问题 一、环境相关问题 二、依赖问题 三、网络问题 四、安装工具问题 五、运行时问题 六、环境配置问…

手机直连卫星NTN通信初步研究

目录 1、手机直连卫星之序幕 2、卫星NTN及其网络架构 2.1 NTN 2.2 NTN网络架构 3、NTN的3GPP标准化进程 3.1 NTN需要适应的特性 3.2 NTN频段 3.3 NTN的3GPP标准化进程概况 3.4 NTN的3GPP标准化进程的详情 3.4.1 NR-NTN 3.4.1.1 NTN 的无线相关 SI/WI 3.4.1.2…

【SpringBoot】什么是Maven,以及如何配置国内源实现自动获取jar包

前言 &#x1f31f;&#x1f31f;本期讲解关于Maven的了解和如何进行国内源的配置~~~ &#x1f308;感兴趣的小伙伴看一看小编主页&#xff1a;GGBondlctrl-CSDN博客 &#x1f525; 你的点赞就是小编不断更新的最大动力 &#x1f3…

阿里斑马智行 2025届秋招 NLP算法工程师

文章目录 个人情况一面/技术面 1h二面/技术面 1h三面/HR面 20min 个人情况 先说一下个人情况&#xff1a; 学校情况&#xff1a;211本中9硕&#xff0c;本硕学校都一般&#xff0c;本硕都是计算机科班&#xff0c;但研究方向并不是NLP&#xff0c;而是图表示学习论文情况&…

力扣第 55 题 跳跃游戏

力扣第 55 题 跳跃游戏&#xff08;Jump Game&#xff09;。题目要求判断一个非负整数数组中&#xff0c;是否能够从第一个位置跳跃到最后一个位置。每个元素表示从当前位置最多可以跳跃的步数。 解题思路 我们可以用 贪心算法 来解决这个问题。贪心的核心思想是始终维护当前…

富士施乐DocuContre S2520报打开盖子A,取出纸张。代码077-900故障检修

故障描述: 一台富士施乐DocuContre S2520复印机开机报错:打开盖子A,取出纸张。代码077-900故障,用户之前经常卡纸,卡着、卡着就一直提示打开盖子A,取出纸张了;复印机屏幕提示如下图: 故障检修: 富士施乐DocuContre S2520复印机报打开盖子A,取出纸张。077-900的错误代…

【jvm】方法区常用参数有哪些

目录 1. -XX:PermSize2. -XX:MaxPermSize3. -XX:MetaspaceSize&#xff08;Java 8及以后&#xff09;4. -XX:MaxMetaspaceSize&#xff08;Java 8及以后&#xff09;5. -Xnoclassgc6. -XX:TraceClassLoading7.-XX:TraceClassUnLoading 1. -XX:PermSize 1.设置JVM初始分配的永久…

哈佛商业评论 | 项目经济的到来:组织变革与管理革新的关键

在21世纪,项目经济(Project Economy)逐步取代传统运营,成为全球经济增长的核心动力。项目已不再是辅助工具,而是推动创新和变革的重要载体。然而,只有35%的项目能够成功,显示出项目管理领域存在巨大的改进空间。本文将详细探讨项目经济的背景、项目管理的挑战,以及适应…

ES6的Iterator 和 for...of 循环

写在前面 在JavaScript中&#xff0c;Iterator&#xff08;遍历器&#xff09;是一种接口&#xff0c;用于遍历数据结构&#xff08;如数组、对象等&#xff09;中的元素。它提供了一种统一的方式来访问集合中的每个项&#xff0c;包括值和位置。 默认 Iterator 接口 许多内…

大数据CDP集群中ImpalaHive常见使用语法

1. SQL中设置常量 set var:pi_sysdate 20241114; Variable PI_SYSDATE set to 202411142. CDP中impala 创建内外表 #hive3.0 默认不创建事务表的配置参数 set default_transactional_typenone; create external table stg.hd_aml_mac_ip_ext (machinedate string,vc_fundacc…

【Ubuntu24.04】VirtualBox安装ubuntu-live-server24.04

目录 0 背景1 下载镜像2 安装虚拟机3 安装UbuntuServer24.044 配置基本环境5 总结0 背景 有了远程连接工具之后,似乎作为服务器的Ubuntu24.04桌面版有点备受冷落了,桌面版的Ubuntu24.04的优势是图形化桌面,是作为一个日常工作的系统来用的,就像Windows,如果要作为服务器来…

01.防火墙概述

防火墙概述 防火墙概述1. 防火墙的分类2. Linux 防火墙的基本认识3. netfilter 中五个勾子函数和报文流向 防火墙概述 防火墙&#xff08; FireWall &#xff09;&#xff1a;隔离功能&#xff0c;工作在网络或主机边缘&#xff0c;对进出网络或主机的数据包基于一定的 规则检…