Sim, por isso que eu disse que o svelte
separa estado local que o componente possui criado com a palavra chave let de estado compartilhado/combinável criado usando stores
Só que assim como no React os componentes não conseguem reagir a mudanças numa store, apenas a mudanças em estados locais
Então para fazer um componente reagir a mudanças em uma store é necessário criar um estado local e sincronizar esse estado com a store usando o método .subscribe (por isso o contrato de store exige esse método) para que então o componente reaja ao estado local
Basicamente quando você escreve isso:
<script lang="ts">
import {writable} from 'svelte/store'
const count = writable(0)
</script>
<button on:click={() => {$count++}}>Count is: {$count}</button>
O compilador transforma nisso:
<script lang="ts">
import {writable} from 'svelte/store'
import {onDestroy} from 'svelte'
const count = writable(0)
let $count
const unsubscribe = count.subscribe((value) => {
$count = value
})
onDestroy(() => {
unsubscribe()
})
</script>
<button on:click={() => {count.update((value) => value + 1)}}>Count is: {$count}</button>
No fim para reagir a estados externos o svelte precisa fazer algo parecido com o hook useExternalAsyncStore do react (só que 1000x mais poderoso e versátil)
A diferença dos signals no Solid é que os componentes conseguem reagir diretamente aos estados compartilhaveis/combináveis que são os signals, sem precisar (e sem poder) usar estado local no componente