Svelte 支援類似 Vue 的 watch
,只要加上 $
Label 即可,Svelte Compiler 會幫你產生相對應的 Code。
Version
macOS Catalina 10.15.1
WebStorm 2019.2.4
Svelte 3.0.0
Reactive Statement
<script>
let firstName = ''
let lastName = ''
$: fullName = `${firstName} ${lastName}`
$: if (firstName === 'Sam') firstName = 'Mr.' + firstName
</script>
First name:<input type="text" bind:value={ firstName }>
Last name:<input type="text" bind:value={ lastName }>
<p>{ fullName }</p>
Reactivity 除了用在 variable 外,也可用在 statement,只要 statement 內的 variable 改變,該 statement 就會被 trigger 執行,相當於 Vue 的 watch
。
Svelte 借用了目前 ECMAScript 較少用的 label
語法,只要加上 $
label,之後的 statement 會自動成為可 watch
的 statement。
<script>
let firstName = ''
let lastName = ''
$: fullName = `${firstName} ${lastName}`
$: {
if (firstName === 'Sam')
firstName = 'Mr.' + firstName
}
</script>
First name:<input type="text" bind:value={ firstName }>
Last name:<input type="text" bind:value={ lastName }>
<p>{ fullName }</p>
若 statement 多行,只要使用 {}
刮起來即可。
Conclusion
$:
乍看之下很怪,事實上完全合乎 ECMAScript 語法,只是 Svelte 將這個罕用功能重新拿來使用,只要 Svelte compilter 看到$:
,就會幫你產生watch
相對應功能的 code