在 Sapper 中,只有在客户端呈现时(使用onMount
),我才尝试导入组件。有没有类似于 ReactSuspense
和的 东西React.lazy
?还是有另一种方法?
你当然可以这样做,是的:
<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>
Run Code Online (Sandbox Code Playgroud)
或者,您可以将其包装到一个组件中:
<!-- 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}
Run Code Online (Sandbox Code Playgroud)
<Loader
this={() => import('./Thing.svelte')}
answer={42}
>
<p>some slotted content</p>
<p slot="fallback">loading...</p>
</Loader>
Run Code Online (Sandbox Code Playgroud)
演示在这里。这种方法的一个警告是,插槽以外的插槽default
不会被“转发”到底层组件。
归档时间: |
|
查看次数: |
533 次 |
最近记录: |