如何在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
相关产品推荐
相关产品推荐

