You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SvelteKit中Store数据短暂显示后消失的问题求助

问题分析与解决方案

你的问题核心是服务器端设置的Store无法同步到客户端,导致页面SSR时能渲染数据,但客户端hydration完成后,Store被重置为初始值,页面变成空白。

原因说明

SvelteKit的服务器端和客户端是独立运行的,你在+page.server.js的load里设置的Store是服务器端的实例,客户端初始化时会重新创建Store实例并使用你定义的初始值(空值),所以hydration后页面数据被清空。

修复步骤

1. 修改+page.server.js,返回查询数据而非直接设置Store

// +page.server.js
import { supabase } from '$lib/supabase';

export async function load({ params }) {
  const { data: treatment, error } = await supabase
    .from('treatments')
    .select('uuid, name')
    .eq('uuid', params.treatmentId) // 替换为你的实际路由参数名
    .single();

  // 将数据和错误返回给页面
  return { treatment, error };
}

2. 在+page.svelte中接收数据并更新客户端Store

<script>
  import { page } from '$app/stores';
  import { treatment_uuid, treatment_name, error } from '$lib/stores/treatment.js';

  // 监听页面数据变化,同步更新客户端Store
  $: if ($page.data.treatment) {
    treatment_uuid.set($page.data.treatment.uuid);
    treatment_name.set($page.data.treatment.name);
  }

  $: if ($page.data.error) {
    error.set($page.data.error);
  }
</script>

<!-- 页面渲染逻辑 -->
<div>
  {#if $treatment_uuid}
    <p>UUID: {$treatment_uuid}</p>
    <p>名称: {$treatment_name}</p>
  {:else if $error}
    <p>错误: {$error.message}</p>
  {:else}
    <p>加载中...</p>
  {/if}
</div>

3. 确认Store初始值(可选)

确保treatment.js中的Store初始值符合预期:

// treatment.js
import { writable } from 'svelte/store';

export const treatment_uuid = writable('');
export const treatment_name = writable('');
export const error = writable(null);

简化方案(如果仅当前页面使用数据)

如果不需要在多个组件间共享这些数据,直接使用$page.data渲染更简单,无需额外维护Store:

<script>
  import { page } from '$app/stores';
</script>

<div>
  {#if $page.data.treatment}
    <p>UUID: {$page.data.treatment.uuid}</p>
    <p>名称: {$page.data.treatment.name}</p>
  {:else if $page.data.error}
    <p>错误: {$page.data.error.message}</p>
  {:else}
    <p>加载中...</p>
  {/if}
</div>

内容的提问来源于stack exchange,提问作者user3565485

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 00:07:05