如何简化$:
代码?
Symbol.svelte
<script>
export let symbol;
$:c = symbol.c;
$:name = symbol.name;
$:{console.log("log Symbol", name, c)}
</script>
<div on:click={()=>symbol.c=0} >
{name} {c}
</div>
我梦见这样的事情:
export let symbol;
$:{c,name} = symbol;
我不能使用...
export let c,name;
。因为on:click
我必须用symbol.c = 0
修改symbol
对象 - 没有这个,我名为list
的store
将不会更新。
整个示例:https://svelte.dev/repl/37e3a1fa96fc4f1dbc7cfcafb1edc439?version=3.22.1
PS,如果您可以使用export let c, name;
而不会丢失store
更新,请指定如何操作。
如果要解构反应语句中的变量,只需将语句括在括号中:
$: ({ c, name } = symbol);
在此处了解更多信息:没有 var 的对象解构
就目前而言,您当前没有在on:click
处理程序中更新list
存储。事实上,除了初始化它或使用依赖于另一个存储的奇数机制将元素设置为零之外,您没有其他方法来设置/更新list
存储。
老实说,我对你的商店没有多大意义,但是尽管如此,使用您设计的商店并利用其现有方法,以下内容将起作用并实际更新您的商店:
Symbol.svelte
<script>
import { list, inputSymbol } from './stores.js';
export let c, name
$:console.log("log Symbol", name, c)
</script>
<div on:click={() => {
inputSymbol.set(name)
list.setToZero()
}}>
{name} {c}
</div>
App.svelte
...
{#each $list as symbol (symbol.name)}
<Symbol {...symbol}/>
{/each}
请参阅 REPL(list
App.svelte 中的商店控制台登录中添加以实际跟踪商店更新)