Skip to main content

当组件状态更改时,Svelte 会自动通知 DOM 更新。但有时候,有些组件的状态是通过 其他 部分计算出来的,比如 fullname 是由 firstnamelastname 合并出来的。当其中某一部分变更时,它们都需要重新计算。

对于这种情况,我们有 响应式声明,长这样:

App.svelte
let count = 0;
$: doubled = count * 2;

如果一个响应式语句只包含对一个未声明变量的赋值,那么 Svelte 会自动加一个 let

如果这看上去有点奇怪,不要想太多,这其实是 合法 (但可能不太常见)的 JavaScript 语法。对于 Svelte 来说,这个语法的含义就是每当被引用的值更改时,就重新计算。习惯就好。

让我们在标记中用一下这个 doubled

App.svelte
<button>...</button>

<p>{count} doubled is {doubled}</p>

当然了,对于这个例子来说,你大可以直接写 {count * 2},根本用不着什么响应式。但是响应式变量在某些情况下会很有用,比如你需要多次引用一个计算出来的值,或者你的变量依赖于 其他 响应式变量。

响应式的声明和语句会在其他脚本代码运行完毕之后,组件标记代码渲染之前运行。

Next: 语句

1
2
3
4
5
6
7
8
9
10
11
12
13
<script>
	let count = 0;
 
	function increment() {
		count += 1;
	}
</script>
 
<button on:click={increment}>
	Clicked {count}
	{count === 1 ? 'time' : 'times'}
</button>
 
initialising