路由系统 #

一、文件系统路由 #

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>;
}

四、导航 #

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 最佳实践 #

  1. 使用文件系统路由
  2. 布局使用 Outlet
  3. 动态路由加载数据
  4. 使用 A 组件进行导航
最后更新:2026-03-28