frejs / fre

:ghost: Tiny Concurrent UI library with Fiber.

Home Page:https://fre.deno.dev

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

[重构] fragment 前置处理

yisar opened this issue · comments

当前的 fragment 是在 commit 阶段处理的,这会引发顺序问题

需要一种大型的重构来解决这个问题,这可能会比较困难

举个例子:

<B>
  <li/>
  <li/>
</B>
<C/>
<div/>

这种组件和元素混合的情况下,effectlist 顺序是这样的 B -> C -> button -> li -> li

按照 fre 现在的处理,对组件的操作会转移到它的孩子身上,也就是说,B C 会被跳过,那么遍历顺序就变成了 button -> li -> li

刚好顺序就错乱了,正确顺序应该是 li -> li -> button,也就是说,应该跳过的是后续的 li,而不是组件

为了解决这个问题,需要进行重构,有两个选择

  1. effectlist 生成的时候,遇到组件,则将真实 fiber 存入 next 指针
  2. 生成原顺序的 effectlist,但如果遍历的时候跳过后续的 fiber

我想尝试一下第一种方案,因为这就是 effectlist 存在的意义,如果搞不定就,实现第二种