Skip to content

State not rerendering in reusable reactivity logic #16218

Closed as duplicate of#16199
@faizwong

Description

@faizwong

Describe the bug

This bug seems to happen starting version 5.34.4

Consider a very simple example

<!-- App.svelte -->

<script>
	import createCounter from "./createCounter.svelte.ts"

	const counter = createCounter()
</script>

<button onclick={counter.increment}>Count: {counter.count}</button>

// createCounter.svelte.ts

const createCounter = () => {
	let count = $state(0)

	const increment = () => {
		count += 1;
	}

	return {
		get count() {
			return count
		},
		increment
	}
}

export default createCounter

Prior to version 5.34.4, this will work as expected. 5.34.4 onwards, the count state never rerenders upon increment.

Reproduction

Compare these two behaviors in two different versions. One is working (5.34.3) and one is not (5.34.4)

https://svelte.dev/playground/be9f1fb951b44427a98dd736af9a7b1d?version=5.34.3

https://svelte.dev/playground/be9f1fb951b44427a98dd736af9a7b1d?version=5.34.4

Logs

System Info

System:
    OS: macOS 14.6
    CPU: (8) arm64 Apple M3
    Memory: 307.73 MB / 16.00 GB
    Shell: 5.9 - /bin/zsh
  Binaries:
    Node: 22.16.0 - ~/.nvm/versions/node/v22.16.0/bin/node
    npm: 10.9.2 - ~/.nvm/versions/node/v22.16.0/bin/npm
  Browsers:
    Brave Browser: 137.1.79.126
    Chrome: 137.0.7151.120
    Safari: 17.6
  npmPackages:
    svelte: ^5.0.0 => 5.34.7

Severity

blocking an upgrade

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