当前位置:首页 > 科技  > 软件

诉诸 Vue 组合式 API 解构 Props

来源: 责编: 时间:2024-01-15 09:21:43 323观看
导读大家好,这里是大家的林语冰。响应式 API 赋予了组合式 API 一大坨可能性的同时,代码精简。虽然但是,我们应该意识到响应性的某些陷阱,比如丢失响应性。在本文中,我们将学习如何正确解构 Vue 组件的 props,使得 props 不会丢

大家好,这里是大家的林语冰。6Ch28资讯网——每日最新资讯28at.com

响应式 API 赋予了组合式 API 一大坨可能性的同时,代码精简。虽然但是,我们应该意识到响应性的某些陷阱,比如丢失响应性。6Ch28资讯网——每日最新资讯28at.com

在本文中,我们将学习如何正确解构 Vue 组件的 props,使得 props 不会丢失响应性。6Ch28资讯网——每日最新资讯28at.com

1. 解构 props

编译器宏 defineProps() 可以辅助读写提供给 <script setup> 中的组件的 props:6Ch28资讯网——每日最新资讯28at.com

图片图片6Ch28资讯网——每日最新资讯28at.com

上述示例中,props 是一个响应式对象,包含了提供给组件的 props。如果组件 props 变化了,props 响应式对象也会随之变化。6Ch28资讯网——每日最新资讯28at.com

读写 props 对象时,我们要做的第一件事可能是,解构 props 对象,然后读写各个属性。但当我学习 Vue 组合式 API 时,令我大吃一惊的是,解构的 props 丢失了响应性!6Ch28资讯网——每日最新资讯28at.com

让我们来看一个例子。下述组件 <EvenOdd :count="5"> 接受 count 属性作为数字,并显示一条消息,无论 count 是偶数还是奇数。6Ch28资讯网——每日最新资讯28at.com

在解构 props 对象 const { count } = defineProps() 之后,访问该 count 属性:6Ch28资讯网——每日最新资讯28at.com

图片图片6Ch28资讯网——每日最新资讯28at.com

单击几次增加按钮。您会注意到,尽管 count 属性不断累加,但 "The number is even" 消息始终保持不变。6Ch28资讯网——每日最新资讯28at.com

当解构 props 对象 const { count } = defineProps() 时,响应性就会丢失。6Ch28资讯网——每日最新资讯28at.com

响应性之所以会丢失,是因为在解构时 count 变异为具有原始值的变量(一个平平无奇的数字罢了)。但 Vue 的响应性不能直接作用于原始值:Vue 必须诉诸 ref 或响应式对象。6Ch28资讯网——每日最新资讯28at.com

粉丝请注意,在 Vue 中将原始值直接赋值给变量时要小心:此乃丢失响应性的前提。6Ch28资讯网——每日最新资讯28at.com

2. 解决方案 1:使用“props”对象

第一个显而易见的解决方案是,不要解构 props 对象,并使用属性读写器直接读写 props: props.count。6Ch28资讯网——每日最新资讯28at.com

图片图片6Ch28资讯网——每日最新资讯28at.com

上述示例中,读写 computed() 内的 props.count 可以在 props.count 变更时保留响应性。props 对象是响应式的,对其进行任何变更都会被正确追踪。6Ch28资讯网——每日最新资讯28at.com

这种方案的短板是,我们必须始终使用属性读写器(比如 props.count)来读写 <script setup 中的 prop。6Ch28资讯网——每日最新资讯28at.com

解决方案 2:使用 toRefs() 辅助函数

如果您阅读至此,我敢打赌您是解构赋值的忠实粉丝,并且没有它就活不下去。6Ch28资讯网——每日最新资讯28at.com

问题不大,那么您可以有意识地将 props 对象的每个属性转换为 ref,来保留解构 props 的响应性。Vue 提供了一个特殊的辅助函数 toRefs(reactiveObject) 来精准完成此操作。6Ch28资讯网——每日最新资讯28at.com

其工作机制如下:6Ch28资讯网——每日最新资讯28at.com

图片图片6Ch28资讯网——每日最新资讯28at.com

toRefs(props) 返回一个对象,其中每个属性都是对相应 prop 的 ref。6Ch28资讯网——每日最新资讯28at.com

现在解构 const { count } = toRefs(props) 是安全的,因为 count 是基于 count 属性的 ref。现在,每次 count 属性变更时,count 的 ref 都会响应属性更改。6Ch28资讯网——每日最新资讯28at.com

将 count 作为 ref,在 computed() 内,我们必须使用 count.value 读写 prop 的值(因为 count.value 是我们读写 ref 的值的方式)。6Ch28资讯网——每日最新资讯28at.com

我发现此方案可以方便地将 prop ref 作为参数传递给组合式函数:比如 useMyComposable(count),并且不会丢失响应性。6Ch28资讯网——每日最新资讯28at.com

否则,我会坚持之前的方案,直接使用 props 对象读写 prop。6Ch28资讯网——每日最新资讯28at.com

4. 总结一下

粉丝请注意,通过应用解构 const { propA, propB } = defineProps(),我们会丢失 props 的响应性。6Ch28资讯网——每日最新资讯28at.com

解决响应性丢失的方案主要有两种:6Ch28资讯网——每日最新资讯28at.com

不解构 props,而是诉诸属性读写器直接读写 props:比如 props.xxx/props.cat。6Ch28资讯网——每日最新资讯28at.com

有意识地使用 props 作为 refs 的对象:const { propA, propB } = toRefs(props)。这保留了解构后的响应性。然后我们可以将属性作为独立 ref 读写,比如 propsA.value/propB.value 等。6Ch28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-60978-0.html诉诸 Vue 组合式 API 解构 Props

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 数据科学不可或缺的十个Python库,让你事半功倍

下一篇: Go语言常见错误—Any 没传递任何信息

标签:
  • 热门焦点
  • 7月安卓手机性能榜:红魔8S Pro再夺榜首

    7月份的手机市场风平浪静,除了红魔和努比亚带来了两款搭载骁龙8Gen2领先版处理器的新机之外,别的也想不到有什么新品了,这也正常,通常6月7月都是手机厂商修整的时间,进入8月份之
  • 线程通讯的三种方法!通俗易懂

    线程通信是指多个线程之间通过某种机制进行协调和交互,例如,线程等待和通知机制就是线程通讯的主要手段之一。 在 Java 中,线程等待和通知的实现手段有以下几种方式:Object 类下
  • Golang 中的 io 包详解:组合接口

    io.ReadWriter// ReadWriter is the interface that groups the basic Read and Write methods.type ReadWriter interface { Reader Writer}是对Reader和Writer接口的组合,
  • JVM优化:实战OutOfMemoryError异常

    一、Java堆溢出堆内存中主要存放对象、数组等,只要不断地创建这些对象,并且保证 GC Roots 到对象之间有可达路径来避免垃 圾收集回收机制清除这些对象,当这些对象所占空间超过
  • 慕岩炮轰抖音,百合网今何在?

    来源:价值研究所 作者:Hernanderz&ldquo;难道就因为自己的一个产品牛逼了,从客服到总裁,都不愿意正视自己产品和运营上的问题,选择逃避了吗?&rdquo;这一番话,出自百合网联合创
  • 破圈是B站头上的紧箍咒

    来源 | 光子星球撰文 | 吴坤谚编辑 | 吴先之每年的暑期档都少不了瞄准追剧女孩们的古偶剧集,2021年有优酷的《山河令》,2022年有爱奇艺的《苍兰诀》,今年却轮到小破站抓住了追
  • 8月见!小米MIX Fold 3获得3C认证:支持67W快充

    这段时间以来,包括三星、一加、荣耀等等有不少品牌旗下的最新折叠屏旗舰都得到了不少爆料,而小米新一代折叠屏旗舰——小米MIX Fold 3此前也屡屡被传
  • AI芯片初创公司Tenstorrent获三星和现代1亿美元投资

    Tenstorrent是一家由芯片行业资深人士Jim Keller领导的加拿大初创公司,专注于开发人工智能芯片,该公司周三表示,已经从现代汽车集团和三星投资基金等
  • AMD的AI芯片转单给三星可能性不大 与台积电已合作至2nm制程

    据 DIGITIMES 消息,英伟达 AI GPU 出货逐季飙升,接下来 AMD MI 300 系列将在第 4 季底量产。而半导体业内人士表示,近日传出 AMD 的 AI 芯片将转单给
Top