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

诉诸 Vue 组合式 API 解构 Props

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

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

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

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

1. 解构 props

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

图片图片9yT28资讯网——每日最新资讯28at.com

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

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

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

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

图片图片9yT28资讯网——每日最新资讯28at.com

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

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

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

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

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

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

图片图片9yT28资讯网——每日最新资讯28at.com

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

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

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

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

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

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

图片图片9yT28资讯网——每日最新资讯28at.com

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

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

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

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

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

4. 总结一下

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

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

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

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

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

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

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

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

标签:
  • 热门焦点
  • Rust中的高吞吐量流处理

    作者 | Noz编译 | 王瑞平本篇文章主要介绍了Rust中流处理的概念、方法和优化。作者不仅介绍了流处理的基本概念以及Rust中常用的流处理库,还使用这些库实现了一个流处理程序
  • 一篇聊聊Go错误封装机制

    %w 是用于错误包装(Error Wrapping)的格式化动词。它是用于 fmt.Errorf 和 fmt.Sprintf 函数中的一个特殊格式化动词,用于将一个错误(或其他可打印的值)包装在一个新的错误中。使
  • 19个 JavaScript 单行代码技巧,让你看起来像个专业人士

    今天这篇文章跟大家分享18个JS单行代码,你只需花几分钟时间,即可帮助您了解一些您可能不知道的 JS 知识,如果您已经知道了,就当作复习一下,古人云,温故而知新嘛。现在,我们就开始今
  • 2天涨粉255万,又一赛道在抖音爆火

    来源:运营研究社作者 | 张知白编辑 | 杨佩汶设计 | 晏谈梦洁这个暑期,旅游赛道彻底火了:有的「地方」火了&mdash;&mdash;贵州村超旅游收入 1 个月超过 12 亿;有的「博主」火了&m
  • 东方甄选单飞:有些鸟注定是关不住的

    作者:彭宽鸿来源:华尔街科技眼&zwj;&zwj;&zwj;&zwj;&zwj;&zwj;&zwj;&zwj;&zwj;&zwj;东方甄选创始人俞敏洪带队的&ldquo;7天甘肃行&rdquo;直播活动已在近日顺利收官。成立后一
  • 冯提莫签约抖音公会 前“斗鱼一姐”消失在直播间

    来源:直播观察提起&ldquo;冯提莫&rdquo;这个名字,很多网友或许听过,但应该不记得她是哪位主播了。其实,作为曾经的&ldquo;斗鱼一姐&rdquo;,冯提莫在游戏直播的年代影响力不输于现
  • 华为HarmonyOS 4升级计划公布:首批34款机型今日开启公测

    8月4日消息,今天下午华为正式发布了HarmonyOS 4系统,在更流畅的前提下,还带来了不少新功能,UI设计也有变化,会让手机焕然一新。华为宣布,首批机型将会在
  • 三星Galaxy Z Fold5今日亮相:厚度缩减但仍略显厚重

    据官方此前宣布,三星将于7月26日也就是今天在韩国首尔举办Unpacked活动,届时将带来带来包括Galaxy Buds 3、Galaxy Watch 6、Galaxy Tab S9、Galaxy
  • 亲历马斯克血洗Twitter,硅谷的苦日子在后头

    文/刘哲铭  编辑/李薇  马斯克再次挥下裁员大刀。  美国时间11月14日,Twitter约4400名外包员工遭解雇,此次被解雇的员工的主要工作为内容审核等。此前,T
Top