Svelte: $page/state
在 SvelteKit 中,import { page } from '$app/state'; 是 SvelteKit 2.12+ 版本引入的新方式,用于获取当前页面的 只读响应式状态对象(read-only reactive object)。
它是什么?
page是一个全局可用的响应式对象(基于 Svelte 5 的 runes 系统,使用$state.raw实现响应性)。- 它提供当前页面的各种信息,包括 URL、路由参数、加载的数据、HTTP 状态码等。
- 可以在 任何组件(包括 layout、page、甚至嵌套组件)中直接导入和使用,不需要再用旧的
$pagestore($app/stores)。 - 它是 只读 的,不能直接修改,但它的属性变化时会自动触发组件的响应式更新(例如导航到新页面时)。
page 对象的主要属性包括:
page.url:一个URL对象,包含当前页面的完整 URL 信息。page.params:路由动态参数(如/blog/[slug]中的slug)。page.data:从+page.js/+layout.js等load函数加载的数据。page.route:当前路由信息(包含id)。page.status:HTTP 状态码(例如 200、404 等)。page.state:通过pushState/replaceState设置的浅层状态(shallow routing)。
重点:page.url.pathname
page.url是浏览器原生的URL对象。page.url.pathname返回当前页面的路径部分(不包含域名、查询参数等),例如:- 访问
https://example.com/blog/123时,page.url.pathname的值是"/blog/123"。 - 访问首页时,通常是
"/"。
- 访问
这个属性常用于:
- 判断当前页面路径,实现高亮导航菜单。
- 根据路径做条件渲染。
- 监听路由变化(结合 Svelte 5 的 runes 如
$derived或$effect)。