Tenho um simples +page.ts
mostrando a data
string e fornecendo o botão "Atualizar":
<script lang="ts">
import { invalidateAll } from '$app/navigation';
const { data } = $props();
</script>
<p>Data: {data.data}</p>
<button onclick={() => invalidateAll()}>Update</button>
Tenho um universal load
que +page.ts
prefere usar algum tipo de Cache - aqui é apenas um campo estático em uma classe:
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');
Por padrão, a única maneira de contornar esse cache é o usuário solicitá-lo explicitamente pressionando o botão "Atualizar". Mas como posso saber quando o erro load
é causado por invalidação e não pelo carregamento inicial da página para limpar o cache? Ou talvez, mais especificamente, pressionando o botão "Atualizar"? Em outras palavras, o que posso inserir if
aqui:
export async function load() {
if (/* what goes here? */) {
Cache.clear();
}
...
O ideal é que eu procure uma maneira universal, não algo complicado como definir um window
campo para CSR ou um cabeçalho de solicitação para SSR. Poderia ser algo relacionado à rota, um parâmetro de consulta? Mas como definir isso para a chamada invalidate
or invalidateAll
?
Você deve conseguir usar
goto
com um parâmetro de consulta. A função tem um argumento de opções onde você pode definirinvalidateAll
.(Você também pode usar
replaceState
later para remover o parâmetro novamente.)