路由系统 #
一、文件系统路由 #
1.1 路由映射 #
text
文件路径 → URL
src/routes/index.tsx → /
src/routes/about.tsx → /about
src/routes/blog/index.tsx → /blog
src/routes/blog/[slug].tsx → /blog/:slug
src/routes/user/[id].tsx → /user/:id
1.2 基本路由 #
tsx
// src/routes/index.tsx
export default function Home() {
return <h1>Home Page</h1>;
}
// src/routes/about.tsx
export default function About() {
return <h1>About Page</h1>;
}
二、动态路由 #
2.1 动态参数 #
tsx
// src/routes/user/[id].tsx
import { useParams } from 'solid-start';
export default function UserProfile() {
const params = useParams();
return <h1>User ID: {params.id}</h1>;
}
2.2 路由数据 #
tsx
import { createRouteData, useRouteData } from 'solid-start';
export function routeData({ params }) {
return createRouteData(async () => {
const user = await fetchUser(params.id);
return user;
});
}
export default function UserProfile() {
const user = useRouteData();
return (
<div>
<h1>{user().name}</h1>
<p>{user().email}</p>
</div>
);
}
三、嵌套路由 #
3.1 布局路由 #
tsx
// src/routes/blog.tsx (布局)
import { Outlet } from 'solid-start';
export default function BlogLayout() {
return (
<div>
<nav>Blog Navigation</nav>
<Outlet />
</div>
);
}
// src/routes/blog/index.tsx
export default function BlogList() {
return <h1>Blog List</h1>;
}
// src/routes/blog/[slug].tsx
export default function BlogPost() {
return <h1>Blog Post</h1>;
}
四、导航 #
4.1 Link 组件 #
tsx
import { A } from 'solid-start/router';
export default function Navigation() {
return (
<nav>
<A href="/">Home</A>
<A href="/about">About</A>
<A href="/blog">Blog</A>
</nav>
);
}
4.2 编程式导航 #
tsx
import { useNavigate } from 'solid-start/router';
export default function LoginForm() {
const navigate = useNavigate();
const handleSubmit = async (e) => {
e.preventDefault();
await login();
navigate('/dashboard');
};
return <form onSubmit={handleSubmit}>...</form>;
}
五、总结 #
5.1 路由 API #
| API | 说明 |
|---|---|
A |
链接组件 |
useParams |
获取路由参数 |
useNavigate |
导航函数 |
Outlet |
子路由出口 |
useLocation |
当前位置 |
5.2 最佳实践 #
- 使用文件系统路由
- 布局使用 Outlet
- 动态路由加载数据
- 使用 A 组件进行导航
最后更新:2026-03-28