vue 3.5 propsDestructure 破坏了现有的响应式原则 #11877
Replies: 1 comment
-
响应式解构的 RFC 去年四月就已经存在,社区已经反馈讨论了一年多,the ship has sailed,这个功能已经成为稳定功能,现在才提想法已经没有任何意义了。类似
|
Beta Was this translation helpful? Give feedback.
0 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
-
Vue version
3.5.3
Link to minimal reproduction
https://blog.vuejs.org/posts/vue-3-5#reactive-props-destructure
Steps to reproduce
vue3 围绕着两种响应式数据结构,分别是 ref 和 reactive,但 propsDestructure 出现却破坏了这一点,我将从一下几个方面阐述我的观点以及提出个人的建议:
上述代码中,count 看上去只是一个类型为数字的变量(它并不是 ref 和 reactive 中的一种),但它因为最终会被编译成 props.count 而具备响应式。单从代码的角度看上去似乎是增加了一种响应式数据结构,但又无法直接分辨这一数据结构与普通数据结构的差别。
vue 的维护者不应该一味的追求代码的书写方便而丢失可读性,书写的人只为了一时爽,但后期维护者以及维护的成本该怎么办
在 vue3.4 中废弃了 $() 来创建响应式变量,而如今它似乎又出现在 defineProps() 中
$() 的出现确实给开发者带来便利,但它被废弃的其中一个原因就是解构出来的变量与普通变量无法进行很好的区分,导致在使用时很难去理清整个依赖链。
What is expected?
为解决以上问题,有几点建议:
上述代码中,count 应该是一个 ref 类型,rest 应该是一个 reactive 对象
toRefs 最大的问题在剩余属性不是一个 reactive 对象而是一个由 ref 属性组合而成的普通对象, 因为缺乏可以修改 destructure trap ,所以无法从根本上解决此问题。因此,toRefs 很少被使用(事实上可以移除该 api,如果需要,开发者可以自己实现,vue3 提供的 api 实在太多了)
What is actually happening?
no response
System Info
No response
Any additional comments?
No response
Beta Was this translation helpful? Give feedback.
All reactions