【发布时间】:2021-10-12 12:43:24
【问题描述】:
我想要一个基于 URL 动态加载内容的静态页面,例如: https://example.com/pokemon/id
它可以像单页应用程序一样加载到服务器或客户端。
svelte.config.js
import adapter from '@sveltejs/adapter-static';
export default {
kit: {
adapter: adapter({
pages: 'build',
assets: 'build',
fallback: null
}),
}
};
[id].svelte
<script context="module">
export const hydrate = false;
import { getPokemonById } from "../../stores/pokestore";
export async function load(ctx) {
let id = ctx.page.params.id;
const pokeman = await getPokemonById(id);
return { props: { pokeman }}
}
</script>
<script>
export let pokeman;
const type = pokeman.types[0].type.name;
</script>
<svelte:head>
<title>Pokedex - {pokeman.name}</title>
</svelte:head>
<div class="flex flex-col items-center">
<h1 class="text-4xl text-center my-8 uppercase">{pokeman.name}</h1>
<p>Type: <strong>{type}</strong> | Height: <strong>{pokeman.height}</strong>
| Weight: <strong>{pokeman.weight}</strong>
</p>
<img class="card-image" src={pokeman.sprites['front_default']}
alt={pokeman.name}
/>
</div>
如果进入主页并单击链接,则可以正常工作:
<a href={`/pokeman/${pokeman.id}`}><h2>{pokeman.name}</h2></a>
但如果我刷新此页面,我会收到错误 404,因为此页面不存在。
我无法在构建期间生成所有子页面,因为它们是动态的。
我在 Firebase 主机上托管此网站。
【问题讨论】:
-
如果您有答案,请将其发布在答案部分并在 2 天内将其标记为正确