Sapper / Svelte é possível importar componentes condicionalmente?
Sep 12 2020
No Sapper, estou tentando importar um componente apenas se estiver sendo processado no lado do cliente (usando onMount). Existe algo semelhante a React Suspensee React.lazy? Ou existe outra abordagem?
Respostas
5 RichHarris Sep 12 2020 at 20:29
Você certamente pode fazer assim, sim:
<script>
import { onMount } from 'svelte';
let Thing;
onMount(async () => {
Thing = (await import('./Thing.svelte')).default;
});
</script>
<svelte:component this={Thing} answer={42}>
<p>some slotted content</p>
</svelte:component>
Demonstração aqui .
Como alternativa, você pode envolvê-lo em um componente:
<!-- Loader.svelte -->
<script>
import { onMount } from 'svelte';
let loader;
let Component;
onMount(async () => {
Component = (await loader()).default;
});
export { loader as this };
</script>
<svelte:component this={Component} {...$$restProps}>
<slot></slot>
</svelte:component>
{#if !Component}
<slot name="fallback"></slot>
{/if}
<Loader
this={() => import('./Thing.svelte')}
answer={42}
>
<p>some slotted content</p>
<p slot="fallback">loading...</p>
</Loader>
Demonstração aqui . Uma advertência com essa abordagem é que os slots diferentes defaultnão serão 'encaminhados' para o componente subjacente.
O que significa um erro “Não é possível encontrar o símbolo” ou “Não é possível resolver o símbolo”?
Christopher Nolan uma vez se arrependeu de ter lido o 'roteiro de Pulp Fiction' de Quentin Tarantino