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

如何在SvelteKit中识别缓存失效触发的load并清除自定义缓存

问题:区分SvelteKit中load函数的触发来源(初始加载vs invalidateAll触发)

我有一个简单的+page.svelte组件,用于展示data字符串并提供“Update”按钮:

<script lang="ts">
    import { invalidateAll } from '$app/navigation';

    const { data } = $props();
</script>

<p>Data: {data.data}</p>
<button onclick={() => invalidateAll()}>Update</button>

在+page.ts中,我编写了一个通用(universal)load函数,它优先使用自定义缓存(此处通过类的静态字段实现):

export async function load() {
    let data = Cache.getData();
    if (data) {
        console.log('Found cached data');
    } else {
        console.log('No cached data - fetching');
        data = 'Fresh new data';
        Cache.setData(data);
    }

    return {
        data
    };
}

class Cache {
    static data?: string;

    static getData() {
        return this.data;
    }

    static setData(data: string) {
        this.data = data;
    }

    static clear() {
        this.data = undefined;
    }
}

console.log('Initializing cache');
Cache.setData('Old cached data');

按照设计,只有用户点击“Update”按钮时才需要绕过该缓存。但我如何判断当前load函数是由缓存失效(即点击Update按钮调用invalidateAll)触发,而非初始页面加载触发的?或者更具体地说,如何判断这次load是点击“Update”按钮导致的?也就是在以下代码的if条件中应填入什么内容:

export async function load() {
    if (/* 这里该写什么? */) {
        Cache.clear();
    }

    // ... 原load逻辑
}

我希望找到一种通用方法,而非类似为CSR设置window字段或为SSR设置请求头的hack手段。是否可以通过路由相关内容或查询参数实现?但如何为invalidate或invalidateAll调用设置这些参数?

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 08:48:01