Mengumpulkan Variabel dari Halaman ke Layout SvelteKit dengan Slot

Mengumpulkan Variabel dari Halaman ke Layout SvelteKit dengan Slot

Saya tidak dapat menemukan cara untuk mengumpulkan variabel dari komponen yang ditampilkan dalam <slot> ke layout SvelteKit. Saya mencoba beberapa hal, seperti menggunakan bind: atau let: pada slot, tetapi tidak berhasil. Saya juga mencoba untuk mengexport atau tidak mengexport variabel pada layout, tapi saya tidak dapat membuatnya bekerja…

Saya memiliki struktur aplikasi seperti berikut:

__layout

 ├─ header (menu)
 ├─ my_page (<slot>)
 └ my_component (many)
 └ interactive banner

Dalam halaman my_page, saya ingin memperbarui variabel myvar yang ditampilkan dalam banner interaktif ketika pengguna klik pada elemen dalam komponen.

Penyelesaian

Saya menemukan bahwa slot SvelteKit Pages tidak sama dengan slot regular Svelte. Oleh karena itu, cara yang saya lakukan tidak bekerja. Jika Anda ingin membagikan data dinamis dari layout ke halaman anak, Anda dapat menggunakan API Konteks.

Contoh

Di dalam __layout.svelte:

<script>
 import { setContext } from 'svelte';
 import { writable } from 'svelte/store';

 const myvar = writable('');
 setContext('myvar-context', myvar);
</script>

<main>
 <slot myvar={myvar}></slot>
 <p>Layout myvar: {myvar}</p>
</main>

Di dalam mypage.svelte:

<script>
 import { getContext } from 'svelte';
 const myvar = getContext('myvar-context');
</script>

<main>
 <h1>{$myvar}</h1>
 <!-- ... -->
</main>

Penjelasan

Ketika Anda ingin membagikan data dari layout ke halaman anak, Anda dapat menggunakan API Konteks. Cara kerja adalah dengan cara membuat store di dalam layout dan kemudian mengaksesnya di dalam halaman anak melalui getContext. Dengan demikian, variabel tersebut akan berubah secara dinamis ketika nilai yang ditampilkan dalam layout berubah.

Sumber