Svelte #each 不循环遍历数据
Svelte #each not looping through data
我正在使用 SveleteJS 进行试驾,但卡住了
制作了一个 Dashboard
组件,并在该组件内放置了一个白板组件:
<script>
import Whiteboard from "./Whiteboard.svelte";
export let name;
</script>
<div class="box part-of-dashboard">
<Whiteboard lines={[]} />
</div>
Whitebord.svelte
:
<script>
export let lines = [];
export function addLine() {
lines.push("blah");
console.log(lines);
}
</script>
<div style="background-color:red">
{#each lines as line}
<div>
{line}
</div>
{/each}
</div>
<div>
<button on:click={addLine}>
Add Line
</button>
</div>
当我单击按钮时,console.log
触发,我可以看到线条变大了,但我没有看到它在页面上呈现,只有空白的红色 div包装它。
我试过在不同的地方添加$:
,但我还不确定它应该在哪里使用,不应该在哪里使用,并不是说它有什么不同。
我如何让#each 呈现 div 的列表(以及从 on:click
传递数据的正确方法是什么,做 {addLine('blah')} 在页面加载时执行该 addLine)?
因此,这种情况与人们的预期背道而驰,但 Svelte 并未将 [].push()
检测为改变数组变量的状态。这就是为什么控制台日志显示正在更新的变量,但 Svelte 的渲染没有响应。
稍作挖掘后,我发现了几个线程 (1, 2) 指出了这一点,并阐明了在任何对象上调用方法都是如此。
编辑:现在在文档/教程中也明确指出了这一点 - 请参阅 "Updating Arrays and Objects"
最简单的解决方案之一(根据链接的线程和文档)是简单地将变量值重新分配给自身; Svelte 会拾取它并重新渲染。因此,在您的情况下,要使您的代码正常工作,我所要做的就是将其替换为:
export function addLine() {
lines.push("blah");
console.log(lines);
}
有:
export function addLine() {
lines.push("blah");
lines = lines;
console.log(lines);
}
我正在使用 SveleteJS 进行试驾,但卡住了
制作了一个 Dashboard
组件,并在该组件内放置了一个白板组件:
<script>
import Whiteboard from "./Whiteboard.svelte";
export let name;
</script>
<div class="box part-of-dashboard">
<Whiteboard lines={[]} />
</div>
Whitebord.svelte
:
<script>
export let lines = [];
export function addLine() {
lines.push("blah");
console.log(lines);
}
</script>
<div style="background-color:red">
{#each lines as line}
<div>
{line}
</div>
{/each}
</div>
<div>
<button on:click={addLine}>
Add Line
</button>
</div>
当我单击按钮时,console.log
触发,我可以看到线条变大了,但我没有看到它在页面上呈现,只有空白的红色 div包装它。
我试过在不同的地方添加$:
,但我还不确定它应该在哪里使用,不应该在哪里使用,并不是说它有什么不同。
我如何让#each 呈现 div 的列表(以及从 on:click
传递数据的正确方法是什么,做 {addLine('blah')} 在页面加载时执行该 addLine)?
因此,这种情况与人们的预期背道而驰,但 Svelte 并未将 [].push()
检测为改变数组变量的状态。这就是为什么控制台日志显示正在更新的变量,但 Svelte 的渲染没有响应。
稍作挖掘后,我发现了几个线程 (1, 2) 指出了这一点,并阐明了在任何对象上调用方法都是如此。
编辑:现在在文档/教程中也明确指出了这一点 - 请参阅 "Updating Arrays and Objects"
最简单的解决方案之一(根据链接的线程和文档)是简单地将变量值重新分配给自身; Svelte 会拾取它并重新渲染。因此,在您的情况下,要使您的代码正常工作,我所要做的就是将其替换为:
export function addLine() {
lines.push("blah");
console.log(lines);
}
有:
export function addLine() {
lines.push("blah");
lines = lines;
console.log(lines);
}