Svelte:强制重绘组件
Svelte: force to redraw a component
我有一组图表数据。这些图可以是added/removed/reordered。问题是文档中已经存在的组件不会被 Svelte 重新绘制。
<script>
// App.svelte
import Graph from "./Graph.svelte";
let arr = [];
function add(n) {
arr.unshift(n)
arr = arr
}
add(1)
setTimeout(() => add(2), 1000)
setTimeout(() => add(3), 2000)
</script>
{#each arr as number}
<Graph {number} />
{/each}
<script>
// Graph.svelte
import { onMount } from 'svelte'
export let number
let graph
function updateCanvas() {
graph = number
}
updateCanvas(number)
</script>
<div>{graph}</div>
结果是第一张图我画了三遍。这是因为它始终是数组中的最后一个,并且始终是唯一要渲染的。如何强制重绘每个 Graph
?
https://svelte.dev/repl/cc2ee63a296342a9b71c715fdb16aca6?version=3.37.0
提前致谢。
您需要告诉 Svelte 在每次道具更改时重新运行 updateCanvas
。现在 updateCanvas(number)
在启动时只有 运行 一次。让它成为反应式就像在前面添加 $:
(docs reactive assignment here) 一样简单。 Graph.svelte
的固定代码:
<script>
// Graph.svelte
import { onMount } from 'svelte'
export let number
let graph
function updateCanvas() {
graph = number
}
$: updateCanvas(number)
</script>
<div>{graph}</div>
如 svelte 教程 here 中明确所述,尝试更新屏幕时,pop 和 unshift 等方法不起作用。但是,您可以使用对我有用的arr = [n,...arr]
!
我有一组图表数据。这些图可以是added/removed/reordered。问题是文档中已经存在的组件不会被 Svelte 重新绘制。
<script>
// App.svelte
import Graph from "./Graph.svelte";
let arr = [];
function add(n) {
arr.unshift(n)
arr = arr
}
add(1)
setTimeout(() => add(2), 1000)
setTimeout(() => add(3), 2000)
</script>
{#each arr as number}
<Graph {number} />
{/each}
<script>
// Graph.svelte
import { onMount } from 'svelte'
export let number
let graph
function updateCanvas() {
graph = number
}
updateCanvas(number)
</script>
<div>{graph}</div>
结果是第一张图我画了三遍。这是因为它始终是数组中的最后一个,并且始终是唯一要渲染的。如何强制重绘每个 Graph
?
https://svelte.dev/repl/cc2ee63a296342a9b71c715fdb16aca6?version=3.37.0
提前致谢。
您需要告诉 Svelte 在每次道具更改时重新运行 updateCanvas
。现在 updateCanvas(number)
在启动时只有 运行 一次。让它成为反应式就像在前面添加 $:
(docs reactive assignment here) 一样简单。 Graph.svelte
的固定代码:
<script>
// Graph.svelte
import { onMount } from 'svelte'
export let number
let graph
function updateCanvas() {
graph = number
}
$: updateCanvas(number)
</script>
<div>{graph}</div>
如 svelte 教程 here 中明确所述,尝试更新屏幕时,pop 和 unshift 等方法不起作用。但是,您可以使用对我有用的arr = [n,...arr]
!