全书目录

第四十篇:SolidStart 完全指南 —— 精细反应街区宇宙

第十章:读取数据 —— `query + createAsync`

1 分钟 250 字 第 780 / 962 个阅读单元

在 SolidStart 里,读数据的现代主流姿势通常是:

  1. query 定义读取逻辑
  2. 在里面直接写 "use server"
  3. 页面里用 createAsync 消费它
tsx
import { query, createAsync, redirect } from "@solidjs/router";

const getCurrentUser = query(async () => {
  "use server";

  const user = await db.users.getCurrent();
  if (!user) throw redirect("/login");

  return user;
}, "currentUser");

export default function DashboardPage() {
  const user = createAsync(() => getCurrentUser(), {
    deferStream: true
  });

  return <h1>欢迎回来,{user()?.name}</h1>;
}

#为什么这里会有 deferStream: true

官方文档特别提醒了一点:

如果这个读取逻辑里可能:

  • 重定向
  • 改 header
  • 改 cookie / session

那就不能等页面已经开始 streaming 以后再做这些事。

否则就像:

text
公交车都开出站了
你才说“等等,我还要改车牌和目的地”

所以这类 query 常常要配 deferStream: true