W3Cschool
恭喜您成為首批注冊用戶
獲得88經驗值獎勵
前面的例子中的應用程序可以工作,但有一個微妙的錯誤--?unsubscribe
?函數從未被調用。如果該組件被多次實例化和銷毀,這將導致內存泄漏。
修復它的一種方法是使用 ?onDestroy
? 生命周期鉤子:
<script>
import { onDestroy } from 'svelte';
import { count } from './stores.js';
import Incrementer from './Incrementer.svelte';
import Decrementer from './Decrementer.svelte';
import Resetter from './Resetter.svelte';
let count_value;
const unsubscribe = count.subscribe(value => {
count_value = value;
});
onDestroy(unsubscribe);
</script>
<h1>The count is {count_value}</h1>
不過,它開始變得有點樣板化,尤其是當您的組件訂閱了多個 ?stores
? 時。相反,Svelte 有一個小竅門——你可以通過在 ?store
?名稱前加上 ?$
? 來引用 ?store
?值:
<script>
import { count } from './stores.js';
import Incrementer from './Incrementer.svelte';
import Decrementer from './Decrementer.svelte';
import Resetter from './Resetter.svelte';
</script>
<h1>The count is {$count}</h1>
自動訂閱僅適用于在組件的頂級范圍內聲明(或導入)的存儲變量。
您也不限于在標記內使用 ?$count
? — 您也可以在 ?<script>
? 的任何地方使用它,例如在事件處理程序或響應式聲明中。
任何以 ?
$
? 開頭的名稱都被假定為引用 store 值。它實際上是一個保留字符——Svelte 會阻止您使用 ?$
? 前綴聲明自己的變量。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: