Description
Describe the bug
When a prop has a set (for instance <button onclick={() => (checked = !checked)}></button>
) but it doesn't have a getter (like <p>{checked}</p>
), the value read during onDestroy
does not match either the old or the current value of the prop, it's instead read as null
.
This happens because the compiler decides to use $.prop
to read the prop since it detects a "setter", $.prop
"wraps" the prop in a derived
but since we never read from it, when we execute onDestroy
the derived
is still in an "uninitializedstate hence it returns
null` instead of the correct value.
Reproduction
https://svelte.dev/playground/4fa745c18a3c41e88bda761f37b36783?version=5.34.9
Click count++
twice, the 2nd time the Component
is unmounted and onDestroy
is called and it will log the incorrect checked
value that should be true
but is logged as null
.
System Info
System:
OS: Windows 11 10.0.26100
CPU: (32) x64 Intel(R) Core(TM) i9-14900HX
Memory: 41.79 GB / 63.74 GB
Binaries:
Node: 23.5.0 - C:\Program Files\nodejs\node.EXE
Yarn: 1.22.22 - C:\Program Files\nodejs\yarn.CMD
npm: 11.0.0 - C:\Program Files\nodejs\npm.CMD
pnpm: 10.4.0 - ~\AppData\Local\pnpm\pnpm.CMD
Browsers:
Edge: Chromium (137.0.3296.93)
Internet Explorer: 11.0.26100.1882
Severity
annoyance