Mat*_*haN 8 typescript svelte sveltekit
一般来说,我对 svelte 和 svelteKit 很陌生,我正在尝试从 api 加载数据,并且我遵循了 sveltekit todo 示例代码。它对于初始渲染和a标记 onClick 运行良好,但在 div 中on:click更新 url 参数 api 被调用并返回数据,但PageData对象未更新。
这里我附上了我的onClick
import { goto } from '$app/navigation';
const adhigaramClick = (adhigaram: string) => {
selectedAdhigaram = adhigaram
$page.url.searchParams.set('adhigaram',adhigaram);
goto(`?${$page.url.searchParams.toString()}`);
}
Run Code Online (Sandbox Code Playgroud)
这里我附上了 api 调用 ( +page.server.ts)
export const load: PageServerLoad = async ({url, params}) => {
let selectedPaal = "test;
const paramPaal =url.searchParams.get("paal")
const adhigaram =url.searchParams.get("adhigaram")
if (paramPaal) {
selectedPaal = paramPaal;
}
const response = await api('GET', `page/${selectedPaal}${adhigaram?`/${adhigaram}` : ''}`);
if (response.status === 404) {
return {
data: {} as Page
};
}
if (response.status === 200) {
return {
... (await response.json()) as Data
};
}
throw error(response.status);
};
Run Code Online (Sandbox Code Playgroud)
+page.svelte.ts文件获取响应数据( PageData)
import type { PageData } from './$types';
export let data: PageData;
$: console.log(data);
Run Code Online (Sandbox Code Playgroud)
a标签点击工作正常页面重新渲染
<a href={`?paal=${paal.keyword}`} >
{paal.titleTamil}
</a>
Run Code Online (Sandbox Code Playgroud)
无效可能就是您所需要的。
\n\n\nSvelteKit 跟踪每个函数的依赖关系
\nload,以避免在导航过程中不必要地重新运行它。例如,当您从一个页面导航到另一个页面时load,\n根目录中的函数+layout.js不需要重新运行,除非它引用url或\n成员params自上次导航以来发生更改A
\nload将在以下情况下重新运行:\n
\n- 它引用了一个属性
\nparams它引用了其值已更改- 它引用的属性
\nurl(例如url.pathname或url.search它引用了值已更改的- 它打电话
\nawait parent()给父母load并重新运行- \n
fetch它通过或声明了对特定 URL 的依赖depends,并且该 URL 被标记为无效invalidate(url)- 所有活动负载功能均强制重新运行
\ninvalidate()如果
\nload触发函数重新运行,页面将不会重新挂载 \xe2\x80\x94,而是会使用新的data. 这意味着组件的内部状态被保留。如果这不是您想要的,您可以在回调中重置您需要重置的任何内容afterNavigate,和/或将组件包装在{#key ...}块中。
https://kit.svelte.dev/docs/load#invalidation
\n| 归档时间: |
|
| 查看次数: |
3364 次 |
| 最近记录: |