diff --git a/.changeset/fuzzy-ads-poke.md b/.changeset/fuzzy-ads-poke.md new file mode 100644 index 000000000..90b4f3940 --- /dev/null +++ b/.changeset/fuzzy-ads-poke.md @@ -0,0 +1,5 @@ +--- +"@preact/signals": patch +--- + +Fix issue where unmounted vnodes could update with signals diff --git a/packages/preact/src/index.ts b/packages/preact/src/index.ts index 401e2105e..cbff72c6f 100644 --- a/packages/preact/src/index.ts +++ b/packages/preact/src/index.ts @@ -363,6 +363,9 @@ Component.prototype.shouldComponentUpdate = function ( props, state ) { + // Suspended vnodes should always update: + if (this.__R) return true; + // @todo: Once preactjs/preact#3671 lands, this could just use `currentUpdater`: const updater = this._updater; const hasSignals = updater && updater._sources !== undefined; diff --git a/packages/preact/src/internal.d.ts b/packages/preact/src/internal.d.ts index cdf8544e4..98459d92d 100644 --- a/packages/preact/src/internal.d.ts +++ b/packages/preact/src/internal.d.ts @@ -21,6 +21,8 @@ export interface AugmentedElement extends HTMLElement { } export interface AugmentedComponent extends Component { + // onResolve --> Preact indicator for suspended subtrees + __R?: boolean; // hasScuFromHooks // Preact 10.12 - Preact 10.25 u?: boolean;