<script>
let width = 5;
let height = 5;
let area;
$: {
area = width * height;
if (area > 100) {
width = 10;
height = 10;
}
}
</script>
<p>Width: {width}</p>
<p>Height: {height}</p>
<p>Area: {area}</p>
响应式更新正确性及避免重复计算的解释
- 响应式更新正确性:
- 在Svelte中,使用
$:
前缀表示响应式语句块。在这个块中,当width
或height
发生变化时,整个块会被重新执行。这确保了area
总是根据最新的width
和height
值进行计算。
- 当
area
计算完成后,如果area
的值超过100,会将width
和height
重置为10。由于width
和height
是响应式变量,它们的变化又会触发响应式语句块的重新执行,重新计算area
,从而保证了整个逻辑的响应式正确性。
- 避免不必要的重复计算:
- Svelte会跟踪响应式语句块中依赖的变量(这里是
width
和height
)。只有当这些依赖变量发生变化时,响应式语句块才会重新执行。如果width
和height
没有变化,不会重复计算area
,也不会重复检查area > 100
的条件,从而避免了不必要的重复计算。