page is reactive. Use $derived when calculating values from it so they update after navigation.
This page receives { todos } from the universal load in the refreshing data example, with the fields from the API endpoints example.
A normal link sets the filter. /todos?completed=true shows all todos; /todos shows only unfinished ones.
<script>
import { page } from '$app/state';
let { data } = $props();
let showCompleted = $derived(
page.url.searchParams.get('completed') === 'true'
);
let visibleTodos = $derived(
data.todos.filter((todo) => showCompleted || !todo.completed)
);
</script>
<a href={showCompleted ? '/todos' : '/todos?completed=true'}>
{showCompleted ? 'Hide completed' : 'Show completed'}
</a>
{#each visibleTodos as todo (todo.id)}
<p>{todo.task}: {todo.completed ? 'Done' : 'To do'}</p>
{/each}