Incorrect prop value in onDestroy when there's a setter but not getter in the template

#16262

Development PRs

Issue

Solved
R
raythurnvoid
Jun 29, 2025, 4:08 PM

Describe the bug

When a prop has a setter (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 "uninitialized" state 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

Info

Closed at Jul 7, 2025, 5:32 PM
Assignees None
Labels None
Milestone None