[FIX] fiber, lifecycle: trigger a render during the fiber.complete

Have a component which does a render in its onWillPatch, onPatched, onMounted hooks.

Before this commit, the result was incorrect: the second rendering was not taken into account.

After this commit, those renderings are correctly applied at the price of a delayed render when the fiber
is in a critical state.
This commit is contained in:
Lucas Perais (lpe)
2021-12-14 09:31:25 +01:00
committed by Aaron Bohy
parent e2819323ee
commit ddc358f48a
6 changed files with 224 additions and 8 deletions
+7 -1
View File
@@ -136,13 +136,19 @@ export class ComponentNode<T extends typeof Component = typeof Component>
}
async render() {
const current = this.fiber;
let current = this.fiber;
if (current && current.root.locked) {
await Promise.resolve();
// situation may have changed after the microtask tick
current = this.fiber;
}
if (current && !current.bdom && !fibersInError.has(current)) {
return;
}
if (!this.bdom && !current) {
return;
}
const fiber = makeRootFiber(this);
this.fiber = fiber;
this.app.scheduler.addFiber(fiber);