Liam
Liam
> > 异常就是指出现了代码运行时错误, 会设置`completeWork.flags |= Incomplete` > > 根本原因还是 报错影响了 fiber 树的构建吧? 是的呀
对,这里画的是最终状态
谢谢指正。我查了一下,确实有这个问题。某些情况下,mime的解析会运行缓慢。 引用方面是由于dumi的版本依赖问题,dumi最新版还是没有更新mime的版本。 所以dumi没有升级的话,如果我单方面改的话,是不是做不了?只能在外层dependencies里面加入一个最新的`mime`。
这里实际上是在讨论`completeWork`函数的返回值, 绝大多数情况都返回的`null`(即不会派生出子节点). 只有一种特殊情况涉及到`SuspenseComponent 和 SuspenseListComponent`组件, 它们是有返回值的. @creamidea 已经贴上了对应的源码. 在`v17.0.2`中, 这些组件虽然在源码中体现了, 实际上是用不上的. 这个是`v18`的feature, 需要安装`v18`对应的版本才能体验. `SuspenseComponent`有下级`fallback组件`需要渲染, 所以`completeWork`函数会返回自身, 最后退出`completeUnitOfWork`, 再次进入`beginWork`阶段去生成`fallback组件`对应的`fiber节点`
> completeUnitOfWork 阶段会有VDOM 的拼接操作 > > 这个能帮忙具体定位一下代码吗?我在 completeUnitOfWork 里面没有找到。谢谢 @jacty 指的vdom拼接是否就是指代的`SuspenseComponent `的`fallback`这种形式?
18以前都是同步的,没有开启时间切片,也没有开启可中断渲染。现在18是开启了的。 其他的update优先级,渲染优先级是存在的。但是由于legacy模式下没有concurrent特性,故大部分的优先级是没有场景用的(虽然源码里面有,但是大部分没用上)。 18开始,优先级的使用场景要丰富很多,大部分都应用上了
> 看着有点像ProcessOn?谢谢 ominigraffle https://www.omnigroup.com/omnigraffle
Yes, but the 18.x version is in processing now, 17.x is a bit outdated. Maybe translate the 18.x document into English is more appropriate.
> 作者大大想冒昧的请问下什么时候可以看到18.x版本的解析呀~❤️ 不好意思,有点慢,如果8月份不能完全出输出的话,就要推迟到12月份了。 主要是我现在不做前端了,react和我的工作没有接轨的地方,完全需要单独抽时间整理。下半年还要准备考试,只能是尽量抓紧时间了。
重新整理了一下哈, key的作用那篇写的比较草, 现在优化了一下. 1. `key`的作用就是服务于`diff算法`, 是节点是否可以复用的首要判定条件. 2. 如果省略了`key`, 内部会默认使用`null`, 在列表节点有排序需求的情况下, 会造成性能损耗. ### 在多节点的情况下 除非是静态列表渲染, 没有更新动作, 可以省略key. 一般在列表需要二次渲染更新的情况下: - 加上`key`只有好处, 没有坏处. - 省略`key`轻则性能损耗, 严重就会造成状态混乱的bug ### 单节点情况 和多节点原理一致, 如果省略了key且在内部使用了state, 二次更新时也有可能造成状态混乱 归根到底, 需要更新的组件省略key不可以,...