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

诉诸 Vue 组合式 API 解构 Props

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

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

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

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

1. 解构 props

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

4. 总结一下

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

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

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

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

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

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

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

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

标签:
  • 热门焦点
  • 把LangChain跑起来的三个方法

    使用LangChain开发LLM应用时,需要机器进行GLM部署,好多同学第一步就被劝退了,那么如何绕过这个步骤先学习LLM模型的应用,对Langchain进行快速上手?本片讲解3个把LangChain跑起来
  • 三万字盘点 Spring 九大核心基础功能

    大家好,我是三友~~今天来跟大家聊一聊Spring的9大核心基础功能。话不多说,先上目录:图片友情提示,本文过长,建议收藏,嘿嘿嘿!一、资源管理资源管理是Spring的一个核心的基础功能,不
  • 中国家电海外掘金正当时|出海专题

    作者|吴南南编辑|胡展嘉运营|陈佳慧出品|零态LT(ID:LingTai_LT)2023年,出海市场战况空前,中国创业者在海外纷纷摩拳擦掌,以期能够把中国的商业模式、创业理念、战略打法输出海外,他们依
  • 花7万退货退款无门:谁在纵容淘宝珠宝商家造假?

    来源:极点商业作者:杨铭在淘宝购买珠宝玉石后,因为保证金不够赔付,店铺关闭,退货退款难、维权无门的比比皆是。&ldquo;提供相关产品鉴定证书,支持全国复检,可以30天无理由退换货。&
  • 当家的盒马,加速谋生

    来源 | 价值星球Planet作者 | 归去来自己&ldquo;当家&rdquo;的盒马,开始加速谋生了。据盒马官微消息,盒马计划今年开放生鲜供应链,将其生鲜商品送往食堂。目前,盒马在上海已经与
  • 东方甄选单飞:有些鸟注定是关不住的

    作者:彭宽鸿来源:华尔街科技眼&zwj;&zwj;&zwj;&zwj;&zwj;&zwj;&zwj;&zwj;&zwj;&zwj;东方甄选创始人俞敏洪带队的&ldquo;7天甘肃行&rdquo;直播活动已在近日顺利收官。成立后一
  • 华为HarmonyOS 4升级计划公布:首批34款机型今日开启公测

    8月4日消息,今天下午华为正式发布了HarmonyOS 4系统,在更流畅的前提下,还带来了不少新功能,UI设计也有变化,会让手机焕然一新。华为宣布,首批机型将会在
  • iQOO Neo8 Pro即将开售:到手价3099元起 安卓性能最强旗舰

    5月23日,iQOO如期举行了新品发布会,全新的iQOO Neo8系列也正式与大家见面,包含iQOO Neo8和iQOO Neo8 Pro两个版本,其中标准版搭载高通骁龙8+,而Pro版更
  • iQOO Neo8 Pro真机谍照曝光:天玑9200+和V1+旗舰双芯加持

    去年10月,iQOO推出了iQOO Neo7系列机型,不仅搭载了天玑9000+,而且是同价位唯一一款天玑9000+直屏旗舰,一经上市便受到了用户的广泛关注。在时隔半年后,
Top