--- description: Guia detalhado de uso do modo experimental async no Svelte 5 alwaysApply: false --- # Guia: Modo Async Experimental no Svelte 5 Este documento detalha como utilizar o modo `experimental.async` ativado neste projeto. ## 🛠 Como Habilitar Já está configurado no seu `svelte.config.js`: ```javascript compilerOptions: { experimental: { async: true; } } ``` ## 📖 Regras de Uso ### 1. Top-Level Await Agora você pode usar `await` diretamente no seu `

{data.message}

``` ### 2. $derived Assíncrono Valores derivados podem aguardar promessas. Eles se tornam reativos: se uma dependência dentro do `$derived` mudar, a promessa é disparada novamente e o valor é atualizado automaticamente. **✅ Exemplo:** ```javascript let id = $state(1); let user = $derived(await getUser(id)); ``` ### 3. Estados de Carregamento (Loading) Como o componente "suspende", precisamos de uma forma de mostrar que algo está carregando. - **Para o carregamento inicial:** Use ``. - **Para atualizações reativas:** Use `$effect.pending()`. ```svelte {#snippet pending()}

Carregando dados iniciais...

{/snippet}
``` --- ## 🚫 O que NÃO fazer ### ❌ Async no $effect O Svelte não permite `async` diretamente em `$effect`. Se precisar de lógica assíncrona lá, use uma IIFE (Immediately Invoked Function Expression). **Errado:** ```javascript $effect(async () => { await doSomething(); }); ``` **Correto:** ```javascript $effect(() => { (async () => { await doSomething(); })(); }); ``` ### ❌ Evite Loops de Suspensão Não use `await` em valores que mudam muitas vezes por segundo, pois isso fará o componente entrar e sair do estado de "pending" constantemente, prejudicando a UX. --- ## 🔗 Integração com Remote Functions Este projeto usa `remoteFunctions`. A melhor forma de usá-las com o modo async é: ```svelte {#if $effect.pending()} {/if} {#each items as item}
{item.name}
{/each} ```