全书目录

第四十一篇:Qwik 完全指南 —— 可恢复瞬启城区宇宙

第七章:`routeLoader$` —— 开门前先把货送到店里

1 分钟 275 字 第 799 / 962 个阅读单元

routeLoader$ 是 Qwik City 里最重要的读数据入口之一。

它的职责很纯:

  • 在服务端执行
  • 为当前路由准备数据
  • 组件里通过 hook 读取

你可以把它理解成:

商铺开门前,后勤先把当天货品送到门店。

tsx
import { component$ } from '@builder.io/qwik';
import { routeLoader$ } from '@builder.io/qwik-city';

export const useArticle = routeLoader$(async ({ params, fail }) => {
  const article = await db.article.findBySlug(params.slug);

  if (!article) {
    return fail(404, {
      message: '文章不存在',
    });
  }

  return article;
});

export default component$(() => {
  const article = useArticle();

  if ('message' in article.value) {
    return <p>{article.value.message}</p>;
  }

  return (
    <article>
      <h1>{article.value.title}</h1>
      <p>{article.value.summary}</p>
    </article>
  );
});

#routeLoader$ 的心智要点

  • 它跑在服务端
  • 它适合“读”,比如查数据库、拉 CMS、取商品详情
  • 它会在导航时重新执行
  • 它不是给你做 REST API 的,想精细控制响应,用 endpoint

#很像什么?

  • 像 Remix loader
  • 像 Next 里的“服务端取数能力”
  • 但它在 Qwik City 里和路由、布局体系绑得更紧