在加载函数中获取时使用 Sveltekit 加载程序

Djo*_*lic 6 svelte svelte-component svelte-store sveltekit

我在 SvelteKit 中有一个加载函数。它获取一些数据。

有没有办法可以在加载函数解析之前显示加载程序?或者有一些 SSG 会在 SSR 解决后更新?任何可以让流程更加顺畅的方法,而不是无法向用户返回反馈......

<script context="module">
        export const async load = ({ fetch }) => {
            const response = await fetch('https://dog.ceo/api/breeds/image/random')
            return {
                data: await response.json()
            }
        }
</script>

<script>
        export let data;
</script>

<img src={data.message} alt="Dog image" />
Run Code Online (Sandbox Code Playgroud)

我想要一个加载程序直到加载完成或一些默认数据值直到加载完成以获得更好的用户体验。我不想将其移至 onMount,因为我想在 SSR 上调用 api。

我正在寻找初始 CSR 的组合,直到 SSR 加载完成。我希望这也适用于初始加载,而不仅仅是在导航时。

小智 0

当然,最简单的方法是您可以像文档中那样等待获取

https://svelte.dev/repl/70e61d6cc91345cdaca2db9b7077a941?version=3.46.4

<script>
    const fetchImage = (async () => {
        const response = await fetch('https://dog.ceo/api/breeds/image/random')
    return await response.json()
    })()
</script>

{#await fetchImage}
    <p>...waiting</p>
{:then data}
    <img src={data.message} alt="Dog image" />
{:catch error}
    <p>An error occurred!</p>
{/await}
Run Code Online (Sandbox Code Playgroud)

或者任何替代方案(例如分配反应变量)也应该有效

  • 我正在使用 sveltekit 内置“加载”函数进行 SSR https://kit.svelte.dev/docs/loading。想象一下,您将 fetchImage 放入其中,以便它发生在服务器端,但我也希望 &lt;p&gt;...等待&lt;/p&gt; 直到加载函数解析。这样我就有了 SSR,但也没有黑屏。你的例子是纯粹的企业社会责任不是吗? (3认同)