svelte
#sveltekit

sveltekit punya fitur keren lagi, yaitu rerun load function yang ada di +page.ts/+page.server.ts.

contoh:

kita memiliki list data yang bisa dihapus, dan edit. jika tanpa menggunakan fitur ini ketika kita hapus/edit data kita harus melakukan hit ulang ke api untuk mendapatkan data terbaru.
namun dengan fitur ini ketika kita melakukan aksi hapus/edit kita cukup memanggil ulang function load() yang ada di +page.server/+page.ts.
// @filename: src/routes/+page.server.ts
// @noErrors
import type { PageServerLoad } from './$types'
import { setTimeout } from 'timers/promises'

export const load: PageServerLoad = async ({ fetch, depends }) => {
  // rerun fetch  ketika `invalidate('generate-image')` dipanggil pada file +page.svelte
  depends('generate-image')
  async function rerun() {
    const response = await fetch('/api/learn/generate-image', { method: 'GET' })
    await setTimeout(10)
    return await response.json()
  }

  return {
    streamed: {
      image: rerun(),
    },
  }
}
<!-- @filename: src/routes/+page.svelte -->
<script lang="ts">
	import { invalidate, invalidateAll } from '$app/navigation';
	import type { PageData } from './$types';

	export let data: PageData;

	async function rerunLoadFunction() {
		invalidate('generate-image');
		// invalidate((url) => url.href.includes('generate-image'));
		// invalidateAll();
	}
</script>

<button
	class="bg-white text-black p-2 border-0 cursor-pointer hover:bg-gray-2"
	on:click={rerunLoadFunction}
>
	Delete Image
</button>