vue3 setup 组合式api props父子组件传值详解

2023-11-04

vue3组合式api中 父组件通过在子组件上通过v-bind传递给子组件数据

5bbb3830320f4566b21750d83a20e759.png

子组件通过defineprops函数在子组件中定义父组件中传入子组件的数据就可以接收这些数据,然后可在template中直接使用

6e3e369898e5481491c69a5a1a1248de.png

但是想要在setup中使用父组件传递的数据时,必须定义变量接收defineprops的返回值才能使用

2a7abe749d0b4e489f60f6dfb0ece930.png

如果不定义一个变量接受,直接取data是undefinded

以上是基本使用==============================================================

为了方便使用父组件的值,子组件一般会直接解构拿到父组件传下来的值(为了方便演示,我加了一个data2)

fdcc1c221bb64a3699d002a665af77f3.png

这样做可以直接使用data和data2,无需props.data,但有一个致命的缺陷,数据会失去响应式,所以结构时,需要用torefs包裹,因为props本质上时reactive对象,torefs可以把reactive的每个属性变成ref对象,这样解构出来依旧是响应式。(torefs使用需要引入,defineprops不需要)

 aa1f833a0e81478b8746a9083901e36c.png

注意:torefs不能直接包裹defineprops函数,会报错defineprops未定义

细节方面(基本没用,感兴趣可以看看)========================================================================

当父组件传给子组件是响应式对象,那么此数据是原数据的代理对象,因为vue3响应式的构建是通过代理对象完成的,这样通过解构props出来后依然是代理对象,但是如果不通过torefs包裹,此代理对象在子组件中仍然无法完成响应式,因为响应式是通过在ref或reactive对象的set方法中添加组件实例的渲染函数,所以此响应式在哪个组件声明,那个组件实例才能随着数据的变化完成响应式

还有一个因为响应式原理引发的有趣现象,首先我们定义一个obj对象,然后定义另一个obj1 ref对象包裹obj,如下图

 cb86492dd03c465382c1a3850b3ca868.png

 

 此时通过obj更改对象内属性a ,属性成功更改,但dom并没有响应式更新,原因就是通过obj更改,并没有调用obj1的set方法,所以没有触发该实例的渲染函数,普通类型的数据也是一样,只要不是通过ref对象本身更改,都不会调用set方法,就不会调用组件实例渲染函数,也就不会响应式。所以一般这种情况,需要其他变量定义响应式变量时,可以通过computed函数,即可响应式(ref包裹对象时,本质还是通过reactive包裹,所以一样会深度监听,所以没有响应式的原因就是没有调用set方法,跟ref能否深度监听无关)

用torefs包裹reactiv会使其每个属性值都变成ref对象,单独具有响应式,所以结构出来不会失去响应式,但此ref对象和普通的ref对象不同,有两个普通ref对象没有的key属性和object属性,其中key属性是解构出来的属性的属性名,object是原reactive对象,当我们获取value值时,ref的get属性并不会直接返回value,而是通过key值向object属性值,也就是原reactive对象上获取,同样的,set方法也是更改原reactive对象,所以即使解构出来,单独使用,也会和原对象的值保持一致

 

 

 

 

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

vue3 setup 组合式api props父子组件传值详解 的相关文章

随机推荐

  • 浅析三极管工作状态

    1 NPN三极管输出特征曲线 2 NPN三极管工作状态 2 1 截止 发射结反偏 集电结反偏 UBE lt 0 7V 发射结反偏 UCE gt UBE 集电结反偏 三极管工作在截止状态 当发射结电压Ube小于0 7V的导通电压 发射结没有导
  • python中with...as的用法

    文章内容主要部分来至 http www 360doc com content 16 0905 16 25664332 588595085 shtml with as 就是个python控制流语句 像 if while一样 with as语句
  • SQLi LABS Less-29

    第29关使用GET请求提交参数 在url中构造payload即可 源码中并没有做什么过滤 直接测试注入点即可 在url中输入 1 and true a 源码中的SQL会拼接成下面这样 注释后面的内容不起作用 所以真正执行的SQL是这样的 a
  • Idea 14 最详细创建最简单web项目,并且发布在tomcat

    1 New Project 2 选择Empty Project 然后Next 3 填写Project名称 然后 finish 4 出现如下页面
  • 算法小题4→正整数分解质因数

    题目 将一个正整数分解质因数 例如 输入90 打印出90 2 3 3 5 程序分析 对n进行分解质因数 应先找到一个最小的质数k 然后按下述步骤完成 1 如果这个质数恰等于n 则说明分解质因数的过程已经结束 打印出即可 2 如果n lt g
  • Redis使用总结(三、缓存击穿问题)

    什么是缓存击穿 在谈论缓存击穿之前 我们先来回忆下从缓存中加载数据的逻辑 如下图所示 因此 如果黑客每次故意查询一个在缓存内必然不存在的数据 导致每次请求都要去存储层去查询 这样缓存就失去了意义 如果在大流量下数据库可能挂掉 这就是缓存击穿
  • MATLAB求解函数极值及函数图像

    MATLAB具有求解函数极值以及函数图像的功能 简单举一个例子 求解上述函数极值与图像 1 驻点求解 syms x gt gt y 3 x 2 4 x 4 x 2 x 1 gt gt dy diff y gt gt xz solve dy
  • 防火墙旁挂,策略路由引流

    1 案例拓扑图 2 核心设备AR2的主要配置 2 1AR2 acl number 2000 rule 5 permit source 192 168 1 0 0 0 0 255 匹配需要过滤的路由 traffic classifier li
  • Verilog中阻塞赋值与非阻塞赋值的区别

    最近有初学者会问阻塞 和非阻塞 lt 到底是有什么区别 可能确实有很多的文档对这两种语法的定义展开性讲的已经很天花乱坠 但是对于刚刚学习Verilog语法的小伙伴来说 确实有些绕 这边向大家总结一下个人对这两种赋值的一些简单想法 1 在组合
  • 【翻译】RFP有什么问题?

    科技行业充斥着首字母缩略词和缩写 有时会引发强烈的反应 RfP这些字母总是让我在黯然神伤和极度沮丧之间摇摆不定 为什么呢 因为征求建议书的过程突出了我们采购和交付软件和基础设施的方式是如何被打破的 从表面上看 传统的提案申请程序是非常合理的
  • 【js】Array.prototype.concat和Array.flat、Array.flatMap的关联使用

    Array prototype concat 用于合并两个或多个数组 返回一个新数组 不改变原数组 const arr1 1 2 3 const arr2 4 5 6 const arr3 7 8 9 const result arr1 c
  • 800个有趣句子帮你记忆7000个单词

    800个有趣句子帮你记忆7000个单词 1 With my ownears I clearly heard the heart beat of the nuclear bomb 我亲耳清楚地听到原子弹的心脏的跳动 2 Next year t
  • JS循环及调试

    break 终止某个循环 使程序跳到循环块外的下一条语句 在循环中位于break后的语句将不再执行 for var i 1 i lt 5 i let num parseInt prompt 输入第 i 人的成绩 if num lt 0 do
  • 基于SpringBoot+Vue框架前后端分离的在线购物平台的设计与实现

    系统合集跳转 一 系统环境 运行环境 最好是java jdk 1 8 我们在这个平台上运行的 其他版本理论上也可以 IDE环境 Eclipse Myeclipse IDEA或者Spring Tool Suite都可以 tomcat环境 To
  • 量化投资学习-34:缺口是制造恐慌和疯狂情绪的手段!

    缺口是制造恐慌和疯狂情绪的手段 发生在不同的阶段 目的是不一样的 底部向下 加速赶底 一般发生了连续下跌的末端 在最后制造疯狂下跌的恐慌 这是筑底的标志 底部向上 借助缺口 实现快速拉升 快速脱离底部成本区 大阳 底部跳空缺口是中级行情开始
  • ts项目打包报错 error TS6504: xxxxxx is a JavaScript file. Did you mean to enable the ‘allowJs‘ option?

    项目vue3 ts 打包时一个组件如下错误 解决 加上lang
  • 毕业设计-基于机器学习的网络舆情情感倾向分析

    目录 前言 课题背景和意义 实现技术思路 一 论坛文本采集方法研究 二 文本情感分析理论 三 论坛文本预处理 四 文本表示及特征抽取 五 情感倾向分类器 实现效果图样例 最后 前言 大四是整个大学期间最忙碌的时光 一边要忙着备考或实习为毕业
  • Java中异常问题(异常抛出后是否继续执行的问题)

    public static void test throws Exception throw new Exception 参数越界 System out println 异常后 编译错误 无法访问的语句 代码2 异常被捕获 日志打印了异常
  • Python Pandas修改列类型

    使用astype如下 df column df column astype type type即int float等类型 示例 import pandas as pd data pd DataFrame 1 2 2 2 data colum
  • vue3 setup 组合式api props父子组件传值详解

    vue3组合式api中 父组件通过在子组件上通过v bind传递给子组件数据 子组件通过defineprops函数在子组件中定义父组件中传入子组件的数据就可以接收这些数据 然后可在template中直接使用 但是想要在setup中使用父组件