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

SvelteKit 跳转slug页面内容不更新,响应式处理无效求助

解决SvelteKit动态[slug]页面导航后内容不更新的问题

核心问题分析

你的场景中,+page.server.ts的load函数已正确返回新数据,父组件的console.log也能打印新内容,但Editor组件未更新,本质是基于Tiptap的Editor组件仅在初始化时加载内容,没有监听传入的content props变化。


具体解决思路

1. 在Editor组件内部监听content变化并同步到编辑器

Tiptap编辑器默认只会在初始化时读取content,后续props更新不会自动同步。需要在Editor组件中添加响应式语句,监听content变化并调用编辑器API更新内容:

<!-- $lib/editor/index.svelte -->
<script>
  import { onMount } from 'svelte';
  import { Editor, EditorContent } from '@tiptap/svelte';
  import StarterKit from '@tiptap/starter-kit';

  export let content;
  let editor;

  onMount(() => {
    editor = new Editor({
      extensions: [StarterKit],
      content: content,
    });

    return () => editor.destroy();
  });

  // 关键:监听content变化,同步到编辑器实例
  $: if (editor && content) {
    // 第二个参数设为false可保留编辑历史,根据需求调整
    editor.commands.setContent(content, false);
  }
</script>

<EditorContent {editor} />

2. 简化父组件传递逻辑(可选)

父组件中的中间变量content并非必需,可直接将data.page.text传递给Editor,减少潜在的响应式问题:

<!-- +page.svelte -->
<script>
  import Editor from '$lib/editor/index.svelte'
  export let data;
</script>

<Editor content={data.page.text} />

3. 给Editor组件添加唯一key强制重建(快速兜底方案)

如果上述方法无效,可以通过给Editor组件添加key属性,让Svelte在slug变化时销毁并重建组件,确保加载全新内容:

<!-- +page.svelte -->
<Editor content={data.page.text} key={data.page.slug} />

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 04:32:38