a small incremental UI library for the web
javascript web ui
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Track which alternate is current for rendering

garrison bbcf2575 95b4c59f

+19 -4
+1 -1
demos/todo/todo.tsx
··· 33 33 34 34 function submit() { 35 35 addItem(text); 36 - //setText(''); 36 + setText(''); 37 37 } 38 38 39 39 return (
+9 -2
js/commit.ts
··· 12 12 } = EffectTag; 13 13 14 14 export function commitTree(fiber) { 15 - if (!fiber.child) return; 15 + fiber.current = true; 16 + if (fiber.alternate) fiber.alternate.current = false; 16 17 17 - commit(fiber.child); 18 + if (fiber.child) commit(fiber.child); 18 19 } 19 20 20 21 function commit(fiber) { ··· 25 26 } 26 27 27 28 function commitWork(fiber) { 29 + fiber.current = true; 30 + if (fiber.alternate) fiber.alternate.current = false; 31 + 28 32 if (fiber.tag == HostTextFiber) { 29 33 if (fiber.effect === 'placement') commitTextPlacement(fiber); 30 34 else commitTextUpdate(fiber); ··· 118 122 119 123 function unmountFiber(fiber) { 120 124 cleanUpEffects(fiber); 125 + 126 + fiber.current = false; 127 + if (fiber.alternate) assert(fiber.alternate.current === false); 121 128 } 122 129 123 130 function commitTextPlacement(fiber) {
+2
js/fiber.ts
··· 30 30 return { 31 31 id: id ?? nextFiberId++, 32 32 version: 0, 33 + current: false, 33 34 34 35 tag: tag, 35 36 type: null, ··· 59 60 60 61 // fiber.id already set 61 62 fiber.version = fromFiber.version + 1; 63 + fiber.current = false; 62 64 63 65 // fiber.tag already set 64 66 fiber.type = fromFiber.type;
+7 -1
js/render.ts
··· 34 34 function renderEntireQueue() { 35 35 while (RENDER_QUEUE.length > 0) { 36 36 const fiber = RENDER_QUEUE.shift(); 37 - renderFiberTree(fiber); 37 + maybeRenderQueuedFiber(fiber); 38 38 } 39 + } 40 + 41 + function maybeRenderQueuedFiber(fiber) { 42 + // If neither alternate is current the fiber was deleted from the tree 43 + if (fiber.current) renderFiberTree(fiber); 44 + else if (fiber.alternate && fiber.alternate.current) renderFiberTree(fiber.alternate); 39 45 } 40 46 41 47 let WIP_FIBER = null;