Skip to content

$inspect in child component wrapped in {#if} block throws error when if block becomes falsyΒ #15741

@AlexJMohr

Description

@AlexJMohr

Describe the bug

Hard to explain beyond the title, but here goes:

  1. Parent component has data state with a things array in it: let data = $state({things: [...]})
  2. Parent conditionally renders child component: {#if data} <ThingList things={data.things} /> {/if}
  3. ThingList calls $inspect(things) on things prop being passed to it
  4. When the data state in Parent becomes null, $inspect in the child throws in error.
  5. Removing the $inspect(things) call in ThingList makes the error go away.

I suspect it's something weird going on with references, but I don't really know what's going on under the hood so that's a complete guess.

Reproduction

https://svelte.dev/playground/9554421a0ca547089ee1e27e7e258845?version=5.25.12

code
<!-- App.svelte -->
<script>
	import ThingList from "./ThingList.svelte"
	
	let data = $state({things: [{id:1}, {id:2}]})
	
	function reloadData() {
		data = null
		setTimeout(() => {
			data = {things: [{id:1}, {id:2}]}
		}, 1000)
	}
</script>

{#if data}
	<ThingList things={data.things.map((t) => t)} />
{/if}

<button onclick={() => reloadData()}>
	clear
</button>
<!-- ThingList.svelte -->

<script>
	let {things} = $props();
	
	$inspect(things);
</script>

<ul>
	{#each things as thing}
		<li>thing {thing.id}</li>
	{/each}
</ul>

Logs

TypeError: get(...) is null
    get things playground:output:3916
    ThingList playground:output:3881
    inspect playground:output:3270
    update_reaction playground:output:2235
    update_effect playground:output:2401
    internal_set playground:output:1116
    set playground:output:1057
    on_click playground:output:3897
    handle_event_propagation playground:output:2920
    event_handle playground:output:3109
    _mount playground:output:3124
    mount playground:output:3079
    <anonymous> playground:output:3898
    <anonymous> about:srcdoc:45
srcdoc:253:15

System Info

System:
    OS: Linux 6.14 Arch Linux
    CPU: (32) x64 AMD Ryzen 9 7950X 16-Core Processor
    Memory: 53.79 GB / 61.93 GB
    Container: Yes
    Shell: 5.9 - /bin/zsh
  Binaries:
    Node: 22.13.1 - ~/.nvm/versions/node/v22.13.1/bin/node
    Yarn: 1.22.22 - ~/.nvm/versions/node/v22.13.1/bin/yarn
    npm: 10.9.2 - ~/.nvm/versions/node/v22.13.1/bin/npm
  npmPackages:
    svelte: ^5.20.4 => 5.25.8

Severity

blocking all usage of svelte

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions