数据加载 #
一、数据加载概述 #
1.1 数据加载方式 #
text
SolidStart 数据加载
├── createRouteData 路由级数据
├── createServerData$ 服务端函数
├── createResource 组件级数据
└── API Routes REST API
二、createRouteData #
2.1 基本用法 #
tsx
import { createRouteData, useRouteData } from 'solid-start';
export function routeData() {
return createRouteData(async () => {
const response = await fetch('/api/posts');
return response.json();
});
}
export default function Blog() {
const posts = useRouteData();
return (
<ul>
<For each={posts()}>
{(post) => <li>{post.title}</li>}
</For>
</ul>
);
}
2.2 带参数的数据加载 #
tsx
export function routeData({ params }) {
return createRouteData(async () => {
const post = await fetchPost(params.slug);
return post;
}, { key: () => params.slug });
}
三、服务端函数 #
3.1 创建服务端函数 #
tsx
import { createServerData$, createServerAction$ } from 'solid-start/server';
// 读取数据
export const getUsers = createServerData$(async () => {
return await db.user.findMany();
});
// 操作数据
export const createUser = createServerAction$(async (formData: FormData) => {
const name = formData.get('name');
return await db.user.create({ data: { name } });
});
3.2 使用服务端函数 #
tsx
import { createServerData$ } from 'solid-start/server';
export function routeData() {
return createServerData$(async () => {
const users = await db.user.findMany();
return users;
});
}
四、API Routes #
4.1 创建 API #
tsx
// src/routes/api/users.ts
export function GET() {
return new Response(JSON.stringify({ users: [] }), {
headers: { 'Content-Type': 'application/json' }
});
}
export async function POST({ request }) {
const body = await request.json();
return new Response(JSON.stringify(body));
}
五、总结 #
5.1 数据加载 API #
| API | 说明 |
|---|---|
createRouteData |
路由数据 |
createServerData$ |
服务端数据 |
createServerAction$ |
服务端操作 |
useRouteData |
使用数据 |
5.2 最佳实践 #
- 路由级数据使用 createRouteData
- 敏感操作使用服务端函数
- 合理使用缓存
- 处理加载和错误状态
最后更新:2026-03-28