在 SolidStart 里,读数据的现代主流姿势通常是:
- 用
query定义读取逻辑 - 在里面直接写
"use server" - 页面里用
createAsync消费它
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 以后再做这些事。
否则就像:
公交车都开出站了
你才说“等等,我还要改车牌和目的地”所以这类 query 常常要配 deferStream: true。