数据加载 #

一、数据加载概述 #

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

  1. 路由级数据使用 createRouteData
  2. 敏感操作使用服务端函数
  3. 合理使用缓存
  4. 处理加载和错误状态
最后更新:2026-03-28