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

有人抵触ref?有人抵触reactive?

来源: 责编: 时间:2024-05-07 09:10:34 263观看
导读一、背景这几天看到好多文章标题都是类似于:不用 ref 的 xx 个理由不用 reactive 的 xx 个理由历数 ref 的 xx 宗罪我就很不解,到底是什么原因导致有这两批人:抵触 ref 的人抵触 reactive 的人看了这些文章,我可以总结出

gwj28资讯网——每日最新资讯28at.com

一、背景

这几天看到好多文章标题都是类似于:gwj28资讯网——每日最新资讯28at.com

  • 不用 ref 的 xx 个理由
  • 不用 reactive 的 xx 个理由
  • 历数 ref 的 xx 宗罪

我就很不解,到底是什么原因导致有这两批人:gwj28资讯网——每日最新资讯28at.com

  • 抵触 ref 的人
  • 抵触 reactive 的人

看了这些文章,我可以总结出他们的想法。gwj28资讯网——每日最新资讯28at.com

1.抵触 reactive 的人

抵触 reactive 的人,他们的想法大概就是:gwj28资讯网——每日最新资讯28at.com

  • Vue 官方推荐 ref
  • reactive 有类型限制,ref 没有
  • reactive 使用不当会丢失响应式,比如解构
  • reactive 无法修改整个对象的值

2.抵触 ref 的人

抵触 ref 的人,他们的想法大概就是:gwj28资讯网——每日最新资讯28at.com

  • ref 的底层其实就是 reactive,用 ref 相当于多了一层,耗费性能
  • ref 的 .value 用起来很麻烦,增加使用者心里负担
  • ref 到模板的时候会解掉 value 这一层,这时候也会耗费性能

二、把我整笑了~

说实话,看到这些文章,有点把我整笑了,其实你要用 ref 或者 reactive 都没错,但是没比必要那么抵触,编程很多时候并不是非黑即白啊。。。gwj28资讯网——每日最新资讯28at.com

既然 Vue3 推出了 ref 和 reactive,那就说明他们都有存在的必要,在项目中不同的场景去运用他们,我觉得才是最好的,而不是用一个不用另一个,不止这两个,还有很多其他好用的 Vue3 APIgwj28资讯网——每日最新资讯28at.com

我想针对这两批人的想法做一个回应:gwj28资讯网——每日最新资讯28at.com

1.回应 -> 抵触 reactive 的人

  • 官方是推荐,不是抵触
  • reactive 既然有类型限制,那就在特定时候用 reactive 就行
  • 使用不当会丢失响应式?那就是开发者对于 Vue3 API 的使用还不熟
  • 用 Object.assign 就可以修改整个对象的值

2.回应 -> 抵触 ref 的人

  • 耗费性能的话,这么久了,也没人贴出到底耗费了多少性能?
  • value 不麻烦,我觉得 .value 可以起到辨别响应式和非响应式数据的效果,而且现在编辑器都有插件提供的代码补全了,多个 .value 也花不了多少时间吧?

三、灵活使用 Vue3 API 才是王道

其实在平时开发中,我觉得基本数据类型和数组,都可以用 ref 来管理,而对象的话可以使用 reactive 来管理,比如表单对象、状态对象。gwj28资讯网——每日最新资讯28at.com

其实 Vue3 不止有这两个 API ,还有很多其他 API ,也很好用,大家只要去灵活使用它们,能让你的Vue3 项目上一个层次。gwj28资讯网——每日最新资讯28at.com

四、readonly

顾名思义,就是只读的意思,如果你的数据被这个 API 包裹住的话,那么修改之后并不会触发响应式,并且会提示警告。gwj28资讯网——每日最新资讯28at.com

gwj28资讯网——每日最新资讯28at.com

toRaw 主要用在回调传参中,比如我封装一个 hooks,我想要把 hooks 内维护的响应式变量转成普通数据,当做参数传给回调函数,可以用 toRaw。gwj28资讯网——每日最新资讯28at.com

gwj28资讯网——每日最新资讯28at.com

markRaw 可以用来标记响应式对象里的某个属性不被追踪,如果你的响应式对象里有某个属性数据量比较大,但又不想被追踪,你可以使用 markRaw。gwj28资讯网——每日最新资讯28at.com

gwj28资讯网——每日最新资讯28at.com

unref 相当于返回 ref 的 value。gwj28资讯网——每日最新资讯28at.com

gwj28资讯网——每日最新资讯28at.com

九、effectScope & onScopeDispose

effectScope 可以有两个作用:gwj28资讯网——每日最新资讯28at.com

  • 收集副作用
  • 全局状态管理

1.收集副作用

比如我们封装一个共用的 hooks,为了减少页面隐患,肯定会统一收集副作用,并且在组件销毁的时候去统一消除,比如以下代码:gwj28资讯网——每日最新资讯28at.com

gwj28资讯网——每日最新资讯28at.com

但是这么收集很麻烦, effectScope 能帮我们做到统一收集,并且通过 stop 方法来进行清除,且 stop 执行的时候会触发 effectScope 内部的 onScopeDispose。gwj28资讯网——每日最新资讯28at.com

gwj28资讯网——每日最新资讯28at.com

我们可以利用 effectScope & onScopeDispose 来做一些性能优化,比如下面这个例子,我们封装一个鼠标监听的 hooksgwj28资讯网——每日最新资讯28at.com

gwj28资讯网——每日最新资讯28at.com

但是如果在页面里调用多次的话,那么势必会往 window 身上监听很多多余的事件,造成性能负担,所以解决方案就是,无论页面里调用再多次 useMouse,我们只往 window 身上加一个鼠标监听事件。gwj28资讯网——每日最新资讯28at.com

gwj28资讯网——每日最新资讯28at.com

2.全局状态管理

现在 Vue3 最火的全局状态管理工具肯定是 Pinia 了,那么你们知道 Pinia 的原理是什么吗?原理就是依赖了 effectScope:gwj28资讯网——每日最新资讯28at.com

gwj28资讯网——每日最新资讯28at.com

所以我们完全可以自己使用 effectScope 来实现自己的局部状态管理,比如我们封装一个通用组件,这个组件层级比较多,并且需要共享一些数据,那么这个时候肯定不会用 Pinia 这种全局状态管理,而是会自己写一个局部的状态管理,这个时候 effectScope 就可以排上用场了。gwj28资讯网——每日最新资讯28at.com

vueuse 中的 createGlobalState 就是为了这个而生:gwj28资讯网——每日最新资讯28at.com

gwj28资讯网——每日最新资讯28at.com

gwj28资讯网——每日最新资讯28at.com

十、provide & inject

Vue3 用来提供注入的 API,主要是用在组件的封装,比如那种层级较多的组件,且子组件需要依赖父组件甚至爷爷组件的数据,那么可以使用 provide & inject,最典型的例子就是 Form 表单组件,可以去看看各个组件库的源码,表单组件大部分都是用 provide & inject 来实现的,比如 Form、Form-Item、Input这三个需要互相依赖对方的规则、字段名、字段值,所以用 provide & inject 会更好。gwj28资讯网——每日最新资讯28at.com

具体用法看文档吧~https://cn.vuejs.org/guide/components/provide-inject.html。gwj28资讯网——每日最新资讯28at.com

gwj28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-86995-0.html有人抵触ref?有人抵触reactive?

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

上一篇: Go 中间件的优雅实现:处理请求的艺术

下一篇: 微服务架构中的挑战及应对方式:Outbox 模式

标签:
  • 热门焦点
  • 5月iOS设备性能榜:M1 M2依旧是榜单前五

    和上个月一样,没有新品发布的iOS设备性能榜的上榜设备并没有什么更替,仅仅只有跑分变化而产生的排名变动,刚刚开始的苹果WWDC2023,推出的产品也依旧是新款Mac Pro、新款Mac Stu
  • 如何正确使用:Has和:Nth-Last-Child

    我们可以用CSS检查,以了解一组元素的数量是否小于或等于一个数字。例如,一个拥有三个或更多子项的grid。你可能会想,为什么需要这样做呢?在某些情况下,一个组件或一个布局可能会
  • 得物效率前端微应用推进过程与思考

    一、背景效率工程随着业务的发展,组织规模的扩大,越来越多的企业开始意识到协作效率对于企业团队的重要性,甚至是决定其在某个行业竞争中突围的关键,是企业长久生存的根本。得物
  • 十个简单但很有用的Python装饰器

    装饰器(Decorators)是Python中一种强大而灵活的功能,用于修改或增强函数或类的行为。装饰器本质上是一个函数,它接受另一个函数或类作为参数,并返回一个新的函数或类。它们通常用
  • 小红书1周涨粉49W+,我总结了小白可以用的N条涨粉笔记

    作者:黄河懂运营一条性教育视频,被54万人“珍藏”是什么体验?最近,情感博主@公主是用鲜花做的,火了!仅仅凭借一条视频,光小红书就有超过128万人,为她疯狂点赞!更疯狂的是,这
  • 雅柏威士忌多款单品价格大跌,泥煤顶流也不香了?

    来源 | 烈酒商业观察编 | 肖海林今年以来,威士忌市场开始出现了降温迹象,越来越多不断暴涨的网红威士忌也开始悄然回归市场理性。近日,LVMH集团旗下苏格兰威士忌品牌雅柏(Ardbeg
  • 电视息屏休眠仍有网络上传 爱奇艺被质疑“薅消费者羊毛”

    记者丨宁晓敏 见习生丨汗青出品丨鳌头财经(theSankei) 前不久,爱奇艺发布了一份亮眼的一季报,不仅营收和会员营收创造历史最佳表现,其运营利润也连续6个月实现增长。自去年年初
  • 华为Mate 60保护壳曝光:硕大后置相机模组 凸起程度有惊喜

    这段时间以来,关于华为新旗舰的爆料日渐密集。据此前多方爆料,今年华为将开始恢复一年双旗舰战略,除上半年推出的P60系列外,往年下半年的Mate系列也将
  • 回归OPPO两年,一加赢了销量,输了品牌

    成为OPPO旗下主打性能的先锋品牌后,一加屡创佳绩。今年618期间,一加手机全渠道销量同比增长362%,凭借一加 11、一加 Ace 2、一加 Ace 2V三款爆品,一加
Top