获得徽章 0
- 今天看了一篇 Vue.js 3.0 新特性的译文,文中提到 “在当前的 Vue 版本中,当父组件重新渲染时,其子组件也必须重新渲染。 使用 Vue 3 ,可以单独重新渲染父组件和子组件”。
这句话是不严谨的,非常容易产生误导,我觉得有必要说明一下: 2.0 组件的重新渲染就是组件粒度的,除非修改的数据是子组件的 props,才会触发子组件的重新渲染。
那么尤大的 PPT 中提到的场景是 Optimized Slots Generation。在 Vue.js 2.0 中,当父组件数据更新的时候执行会触发重新渲染,最终执行父组件的 patch,在 patch 过程中,遇到组件 vnode,会执行新旧 vnode 的 prepatch,这个过程又会执行 updateChildComponent, 这个时候如果这个子组件 vnode 如果有孩子(插槽内容)的时候,会重新 resolve slot 并执行一次子组件的 forceUpdate(),这种情况下才会触发子组件的重新渲染。而尤大所说的优化应该就是特指插槽的场景。
如果说任何场景下父组件的重新渲染就会触发子组件的数据渲染,那 Vue 的性能得有多差,记住 Vue 2.0 的重新渲染就是组件粒度的。
另外关于插槽的源码实现我的《Vue.js 技术揭秘》电子书有分析,关于插槽数据的更新实现我的源码课程视频里也有提到。所以你对源码感兴趣,可以戳下方电子书链接,电子书是开源免费的。视频课程是收费的,你可以按需购买学习,但请务必去官方购买正版喔~展开755 - 1. 为什么 fre 没有提供 context 的封装?
2. 为什么 hooks 不需要状态管理?
fre 和 react 不同,它只提供最核心的功能,context 不是,hooks 的世界里,context 和 状态管理,都是多余的
因为如果需要状态共享,我随手 20 行代码写个发布订阅即可
API 比 context 好太多~(如下图)
Suspense 也是同理,我也可以随意的 throw promise 让 fre 内部捕获,而不是使用别人封装好的组件展开评论1 - 专题2: 谈谈你对组件的看法
一个组件应该有以下特征:
1. 可组合(Composeable):一个组件易于和其它组件一起使用,或者嵌套在另一个组件内部。如果一个组件内部创建了另一个组件,那么说父组件拥有(own)它创建的子组件,通过这个特性,一个复杂的 UI 可以拆分成多个简单的 UI 组件;
2. 可重用(Reusable):每个组件都是具有独立功能的,它可以被使用在多个 UI 场景;
3. 可维护(Maintainable):每个小的组件仅仅包含自身的逻辑,更容易被理解和维护;
4. 可测试(Testable):因为每个组件都是独立的,那么对于各个组件分别测试显然要比对于整个 UI 进行测试容易的多。
你是如何看待组件的?如果让你写一个组件你会考虑哪些?展开评论2