2

私はこれを理解していません。svelte ストアを購読しようとしています。しかし、 subscribeに渡されたクロージャー関数はすぐに呼び出されています。お店の価値は変わらないのに。

これは洗練されたREPLの例です

次のコードを使用します。

<script>
    import { onDestroy } from 'svelte';
    import { writable } from 'svelte/store';
    
    const store = writable({ givenName: '', familyName: '' });
    
    const unsubscribe = store.subscribe( state => {
    console.log('This function shouldn\'t have been invoked on subscription.');
    });
    onDestroy(unsubscribe);
</script>

<h1>
    Please check the console output ...
</h1>

IMHO、クロージャー関数はサブスクリプションではなく変更時に起動する必要がありますか、何か不足していますか?

4

2 に答える 2

4

ストアは、現在の値で渡さwritableれた関数をすぐに呼び出します。subscribeこれが「設計どおりの動作」です。更新のみを気にする場合は、最初の値を無視する小さなラッパーを自分で作成する必要があります。

たとえば、関数を使用すると

    function subscribeIgnoreFirst(store, fn) {
        let firedFirst = false;
        return store.subscribe(state => {
            if (!firedFirst) {
                firedFirst = true;
            } else {
                fn(state);
            }
        })
    }
于 2021-03-26T14:58:27.910 に答える