<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>TanStack_Start | 锤子前端</title><description>Now vibe coding, so learning hammer FE ?</description><link>https://channel.meo-ai.com</link><item><title>《TanStack Start 心智模型：给 Next.js 开发者的迁移指南》</title><link>https://channel.meo-ai.com/posts/667</link><guid isPermaLink="true">https://channel.meo-ai.com/posts/667</guid><pubDate>Sun, 21 Jun 2026 09:59:34 GMT</pubDate><content:encoded>&lt;span class=&quot;post-title-source&quot;&gt;《&lt;/span&gt;&lt;mark class=&quot;highlight&quot;&gt;&lt;span class=&quot;post-title-source&quot;&gt;TanStack&lt;/span&gt;&lt;/mark&gt;&lt;span class=&quot;post-title-source&quot;&gt; &lt;/span&gt;&lt;mark class=&quot;highlight&quot;&gt;&lt;span class=&quot;post-title-source&quot;&gt;Start&lt;/span&gt;&lt;/mark&gt;&lt;span class=&quot;post-title-source&quot;&gt; 心智模型：给 Next.js 开发者的迁移指南》&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;标签：&lt;a href=&quot;/search/result?q=%23%E5%89%8D%E7%AB%AF&quot; title=&quot;#前端&quot;&gt;#前端&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23TanStack_Start&quot; title=&quot;#TanStack_Start&quot;&gt;#TanStack_Start&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23Next&quot; title=&quot;#Next&quot;&gt;#Next&lt;/a&gt;.js &lt;a href=&quot;/search/result?q=%23React_Router&quot; title=&quot;#React_Router&quot;&gt;#React_Router&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23TypeScript&quot; title=&quot;#TypeScript&quot;&gt;#TypeScript&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23%E5%85%A8%E6%A0%88%E6%A1%86%E6%9E%B6&quot; title=&quot;#全栈框架&quot;&gt;#全栈框架&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;总结：&lt;br /&gt;文章从一位资深 Next.js 开发者的视角，系统对比了 &lt;mark class=&quot;highlight&quot;&gt;TanStack&lt;/mark&gt; &lt;mark class=&quot;highlight&quot;&gt;Start&lt;/mark&gt; 与 Next.js App Router 的核心差异。核心心智模型翻转在于：Next.js 默认服务端优先、隐式约定驱动；&lt;mark class=&quot;highlight&quot;&gt;TanStack&lt;/mark&gt; &lt;mark class=&quot;highlight&quot;&gt;Start&lt;/mark&gt; 默认同构 React、显式声明边界。作者逐一对比了路由类型系统、数据获取、服务端函数、缓存策略、渲染模式、认证防护等关键维度，指出 &lt;mark class=&quot;highlight&quot;&gt;TanStack&lt;/mark&gt; &lt;mark class=&quot;highlight&quot;&gt;Start&lt;/mark&gt; 更适合高交互 SaaS 类应用，而 Next.js 在内容型站点和成熟生态上仍有优势。&lt;br /&gt;&lt;br /&gt;文章要点：&lt;br /&gt;1. 心智模型大翻转：Next.js 默认组件跑在服务端，需要显式标注 &lt;code&gt;&quot;use client&quot;&lt;/code&gt; 才能上客户端；&lt;mark class=&quot;highlight&quot;&gt;TanStack&lt;/mark&gt; &lt;mark class=&quot;highlight&quot;&gt;Start&lt;/mark&gt; 默认组件同构（服务端+客户端都能跑），只有需要纯服务端逻辑时才用 &lt;code&gt;createServerFn&lt;/code&gt; 显式声明，边界更清晰，不容易踩坑&lt;br /&gt;2. 路由类型系统碾压：Next.js 的文件路由是约定驱动，TypeScript 对参数无能为力；&lt;mark class=&quot;highlight&quot;&gt;TanStack&lt;/mark&gt; Router 会在构建时自动生成完全类型化的路由树，路径参数、搜索参数、loader 返回值全部类型推断，拼写错误直接编译报错&lt;br /&gt;3. 数据获取的&quot;陷阱&quot;：Next.js 的 Server Component 只在服务端执行，天然安全；&lt;mark class=&quot;highlight&quot;&gt;TanStack&lt;/mark&gt; &lt;mark class=&quot;highlight&quot;&gt;Start&lt;/mark&gt; 的 loader 是同构的——SSR 时跑在服务端，客户端导航时跑在浏览器里，所以直接写数据库查询会泄露环境变量，必须用 &lt;code&gt;createServerFn&lt;/code&gt; 包裹&lt;br /&gt;4. 缓存哲学更简单：Next.js 历史上有复杂的四层缓存模型，v16 改为 &lt;code&gt;&apos;use cache&apos;&lt;/code&gt; 显式 opt-in；&lt;mark class=&quot;highlight&quot;&gt;TanStack&lt;/mark&gt; &lt;mark class=&quot;highlight&quot;&gt;Start&lt;/mark&gt; 只有路由 loader 缓存 + 可选的 &lt;mark class=&quot;highlight&quot;&gt;TanStack&lt;/mark&gt; Query，没有隐式魔法，哪里缓存、哪里失效一目了然&lt;br /&gt;5. 认证防护双层设计：&lt;code&gt;beforeLoad&lt;/code&gt; 负责 UI 层面的重定向（用户体验），&lt;code&gt;createServerFn&lt;/code&gt; 中间件负责数据层面的安全校验（真正的安全边界），两层职责分离，比 Next.js 把 edge middleware 和 action 内校验混在一起的方案更不容易遗漏&lt;br /&gt;6. Remix 与 RSC 现状：&lt;mark class=&quot;highlight&quot;&gt;TanStack&lt;/mark&gt; &lt;mark class=&quot;highlight&quot;&gt;Start&lt;/mark&gt; 的 RSC 支持仍处于实验阶段，实现方式也与 Next.js 不同（更像客户端获取 Flight payload 后组装），如果生产环境重度依赖 RSC，Next.js 目前更成熟&lt;br /&gt;7. 选型建议：内容型/营销站点选 Next.js；高交互 SaaS 后台、需要强类型安全、讨厌隐式缓存魔法的团队，&lt;mark class=&quot;highlight&quot;&gt;TanStack&lt;/mark&gt; &lt;mark class=&quot;highlight&quot;&gt;Start&lt;/mark&gt; 值得认真评估&lt;br /&gt;&lt;br /&gt;URL：&lt;br /&gt;&lt;a href=&quot;https://www.adarsha.dev/blog/tanstack-mental-model-for-nextjs-developers&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title=&quot;https://www.adarsha.dev/blog/tanstack-mental-model-for-nextjs-developers&quot;&gt;https://www.adarsha.dev/blog/tanstack-mental-model-for-nextjs-developers&lt;/a&gt;&lt;a class=&quot;tgme_widget_message_link_preview&quot; href=&quot;https://adarsha.dev/blog/tanstack-mental-model-for-nextjs-developers&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title=&quot;Understand TanStack Start from a Next.js developer’s perspective: its router-first architecture, explicit server boundaries, typed routing, caching, rendering, and server functions.&quot;&gt;
  
  &lt;div class=&quot;link_preview_site_name accent_color&quot;&gt;Adarsha Acharya&lt;/div&gt;
  &lt;img class=&quot;link_preview_image&quot; alt=&quot;TanStack Start: A Mental Model for Next.js Developers&quot; src=&quot;/static/https://cdn4.telesco.pe/file/Ja3_PLOYCdk_ef6YOzQimki-laVzYQKPWscgPmZVkfjz7dJvyVktlBPYjr0fz-r-XAbor1EWUAJJNcyggHiG0FZZe0VUxcREOqzVZqtUI6kwB771dWmk4swUzl_Oz5TzIpz-FxNLy2vT86ybEurfETg2ReU9ZeESH6jXHKw3Dg6KNLgpxKWmJ0lfkgXKP8Biom9MzNlGHfAiKlVipcNSSmzTWh1lC-147ID8LoseQdKaMtmwxRFIeQZJrnSFR0fiEmHe0F6AmO3fO4nx3yS42vROCGF4EcbrzO6QCrIt9g84djfexf-9do1w-T1zmrPwV_yxzAOwF3OglTbp_karFA.jpg&quot; width=&quot;1200&quot; height=&quot;630&quot; loading=&quot;eager&quot; /&gt;
  &lt;div class=&quot;link_preview_title&quot;&gt;&lt;mark class=&quot;highlight&quot;&gt;TanStack&lt;/mark&gt; &lt;mark class=&quot;highlight&quot;&gt;Start&lt;/mark&gt;: A Mental Model for Next.js Developers&lt;/div&gt;
  &lt;div class=&quot;link_preview_description&quot;&gt;Understand &lt;mark class=&quot;highlight&quot;&gt;TanStack&lt;/mark&gt; &lt;mark class=&quot;highlight&quot;&gt;Start&lt;/mark&gt; from a Next.js developer’s perspective: its router-first architecture, explicit server boundaries, typed routing, caching, rendering, and server functions.&lt;/div&gt;
&lt;/a&gt;</content:encoded></item><item><title>《TanStack中的React服务端组件》</title><link>https://channel.meo-ai.com/posts/636</link><guid isPermaLink="true">https://channel.meo-ai.com/posts/636</guid><pubDate>Wed, 20 May 2026 23:43:43 GMT</pubDate><content:encoded>&lt;span class=&quot;post-title-source&quot;&gt;《TanStack中的React服务端组件》&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;标签：&lt;a href=&quot;/search/result?q=%23%E5%89%8D%E7%AB%AF&quot; title=&quot;#前端&quot;&gt;#前端&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23React_Server_Components&quot; title=&quot;#React_Server_Components&quot;&gt;#React_Server_Components&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23TanStack_Start&quot; title=&quot;#TanStack_Start&quot;&gt;#TanStack_Start&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23NextJs&quot; title=&quot;#NextJs&quot;&gt;#NextJs&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23Bundle_Optimization&quot; title=&quot;#Bundle_Optimization&quot;&gt;#Bundle_Optimization&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;总结：&lt;br /&gt;&lt;mark class=&quot;highlight&quot;&gt;TanStack&lt;/mark&gt; Start实现了与Next.js截然不同的React服务端组件方案，通过显式API将组件渲染保留在服务端，避免将繁重代码发送至客户端。文章以应用外壳为例，展示RSC如何将客户端Bundle从308KB缩减至203KB，并说明其适合大型非交互式组件树的场景，同时澄清RSC并非数据加载或SSR的替代品，而是针对性的性能优化工具。&lt;br /&gt;&lt;br /&gt;文章要点：&lt;br /&gt;1. RSC是只在服务端运行的React组件，可以直接在组件里写await查数据，而且组件代码不会发送到浏览器，不用担心数据库密码暴露给前端&lt;br /&gt;2. TanStack实现RSC的方式特别直白，通过renderServerComponent这类API就能显式声明，作者认为比Next.js的实现更好懂&lt;br /&gt;3. 别误会，RSC不是用来替代数据加载或SSR的，TanStack的loader和原有的服务端渲染已经做得很好了，RSC真正的价值是帮浏览器&quot;减肥&quot;&lt;br /&gt;4. 文章举了个生动的例子：故意引入整个图标库来模拟大型组件树，结果RSC把客户端JS从308KB砍到了203KB，省了不少流量&lt;br /&gt;5. 更妙的是RSC还能接收客户端组件当&quot;插槽&quot;传进来，配合Suspense实现流式渲染，让页面边加载边呈现，体验很丝滑&lt;br /&gt;6. 不过作者也提醒，RSC不是银弹，如果你的组件树不大、依赖不多，用它带来的收益可能微乎其微，得看场景取舍&lt;br /&gt;&lt;br /&gt;URL：&lt;a href=&quot;https://frontendmasters.com/blog/react-server-components-in-tanstack/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title=&quot;https://frontendmasters.com/blog/react-server-components-in-tanstack/&quot;&gt;https://frontendmasters.com/blog/react-server-components-in-tanstack/&lt;/a&gt;&lt;a class=&quot;tgme_widget_message_link_preview&quot; href=&quot;https://frontendmasters.com/blog/react-server-components-in-tanstack&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title=&quot;This post is about React Server Components (or RSC) in TanStack Start. The implementation is radically different, and in my opinion, better than the RSC implementation you’ve likely seen in Next.js.&quot;&gt;
  
  &lt;div class=&quot;link_preview_site_name accent_color&quot;&gt;Frontend Masters&lt;/div&gt;
  &lt;img class=&quot;link_preview_image&quot; alt=&quot;React Server Components in TanStack&quot; src=&quot;/static/https://cdn4.telesco.pe/file/m1SWDG4eNI3zo5DWGvvpwHAqaR5dJaqpFfkb0QMP3mx8b2aWSytphloQUUHun9jb9M8pwvQi_VVMtdXB-8rKX3Z1G11jx6HI0lso3dTK8uHisnfWhOjTsxEuMZFONZWlLgQKCln5satRGo2QmOupH8zKf1tJjZmRajcGNGJ5RrVBnyR8dWxa2HqYsRyWz70Bcyo7zquRetf7HTnpF7Yqx3MEmzw2zUnMlhn2m8Q-08cnNeKJ9tMX7GE9eFcinvzKIY9K4mTyr1qVMMracH5h0DOj_RTcJfrvehT8vfTJGR8KUgkI7E-A2qG3k1U-Ur3e5bq0nHdVvIreHFmwymf85A.jpg&quot; width=&quot;1200&quot; height=&quot;630&quot; loading=&quot;eager&quot; /&gt;
  &lt;div class=&quot;link_preview_title&quot;&gt;React Server Components in &lt;mark class=&quot;highlight&quot;&gt;TanStack&lt;/mark&gt;&lt;/div&gt;
  &lt;div class=&quot;link_preview_description&quot;&gt;This post is about React Server Components (or RSC) in &lt;mark class=&quot;highlight&quot;&gt;TanStack&lt;/mark&gt; &lt;mark class=&quot;highlight&quot;&gt;Start&lt;/mark&gt;. The implementation is radically different, and in my opinion, better than the RSC implementation you’ve likely seen in Next.js.&lt;/div&gt;
&lt;/a&gt;</content:encoded></item><item><title>《用TanStack_Start构建博客（上篇）》</title><link>https://channel.meo-ai.com/posts/601</link><guid isPermaLink="true">https://channel.meo-ai.com/posts/601</guid><pubDate>Sat, 18 Apr 2026 08:38:00 GMT</pubDate><content:encoded>&lt;span class=&quot;post-title-source&quot;&gt;《用TanStack_Start构建博客（上篇）》&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;标签：&lt;a href=&quot;/search/result?q=%23%E5%89%8D%E7%AB%AF&quot; title=&quot;#前端&quot;&gt;#前端&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23TanStack_Start&quot; title=&quot;#TanStack_Start&quot;&gt;#TanStack_Start&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23TanStack_Router&quot; title=&quot;#TanStack_Router&quot;&gt;#TanStack_Router&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23Server_Functions&quot; title=&quot;#Server_Functions&quot;&gt;#Server_Functions&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23%E9%9D%99%E6%80%81%E9%A2%84%E6%B8%B2%E6%9F%93&quot; title=&quot;#静态预渲染&quot;&gt;#静态预渲染&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23Markdown%E5%8D%9A%E5%AE%A2&quot; title=&quot;#Markdown博客&quot;&gt;#Markdown博客&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23%E4%BB%A3%E7%A0%81%E9%AB%98%E4%BA%AE&quot; title=&quot;#代码高亮&quot;&gt;#代码高亮&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;总结：&lt;br /&gt;本文通过实战案例演示如何使用 &lt;mark class=&quot;highlight&quot;&gt;TanStack&lt;/mark&gt; &lt;mark class=&quot;highlight&quot;&gt;Start&lt;/mark&gt; 框架构建一个 Markdown 博客系统。文章重点介绍了 Server Functions 解决同构加载器无法访问文件系统的问题、动态路由参数处理、以及使用 markdown-it 和 Shiki 实现带行号的高亮代码块，为开发者提供了完整的技术实现路径。&lt;br /&gt;&lt;br /&gt;文章要点：&lt;br /&gt;- &lt;mark class=&quot;highlight&quot;&gt;TanStack&lt;/mark&gt; &lt;mark class=&quot;highlight&quot;&gt;Start&lt;/mark&gt; 是基于 &lt;mark class=&quot;highlight&quot;&gt;TanStack&lt;/mark&gt; Router 的轻量级服务端框架，支持 SSR、API 端点和 Server Functions&lt;br /&gt;- 使用 &lt;code&gt;import.meta.glob&lt;/code&gt; 动态扫描 Markdown 文件，配合 &lt;code&gt;gray-matter&lt;/code&gt; 解析文章元数据&lt;br /&gt;- Server Functions 是同构应用的关键——无论 loader 在服务端还是客户端运行，都能保证文件读取逻辑始终在服务端执行&lt;br /&gt;- 动态路由通过 &lt;code&gt;$slug.tsx&lt;/code&gt; 文件命名实现，配合 &lt;code&gt;createFileRoute&lt;/code&gt; 和 &lt;code&gt;head&lt;/code&gt; 函数设置页面标题&lt;br /&gt;- 使用 markdown-it + Shiki 实现代码高亮，通过自定义 transformer 支持 &lt;code&gt;line-numbers&lt;/code&gt; 语法标记，结合 CSS counter 渲染行号&lt;br /&gt;- 文章预告下篇将介绍静态生成和部署策略&lt;br /&gt;&lt;br /&gt;文章URL：&lt;a href=&quot;https://frontendmasters.com/blog/building-a-blog-in-tanstack-part-1-of-2/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title=&quot;https://frontendmasters.com/blog/building-a-blog-in-tanstack-part-1-of-2/&quot;&gt;https://frontendmasters.com/blog/building-a-blog-in-tanstack-part-1-of-2/&lt;/a&gt;&lt;a class=&quot;tgme_widget_message_link_preview&quot; href=&quot;https://frontendmasters.com/blog/building-a-blog-in-tanstack-part-1-of-2&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title=&quot;TanStack Start is one of the newest web frameworks, and its popularity is rising quickly. Start is a thin server-side layer that sits atop TanStack Router and provides features like server functions, API endpoints, and server-side rendering. I wrote a three…&quot;&gt;
  
  &lt;div class=&quot;link_preview_site_name accent_color&quot;&gt;Frontend Masters&lt;/div&gt;
  &lt;img class=&quot;link_preview_image&quot; alt=&quot;Building a Blog in TanStack (Part 1 of 2)&quot; src=&quot;/static/https://cdn4.telesco.pe/file/SdcbHy_4OJWiubsSxzCgJ8NcIYv3G7kH2N2jNrB8t3TbMqiok_ID_AkaDmpPliaU4mXl1YiJIt3X3zT5g_gp8XQIkHth8B2EEC2I6G6apJbHqmdP2u2Iq-PnmtOwfh1fZkB1rppS9zlgzO9GOVVvwO0zRR2yAlmLqAU9C7EOxHZhSNDPt17w8I2KFUxv3OSj56leWB3dwsNJFepmI9N7zNXorIyCzBwmT7GCZHtrwEnltgmCDIt4nT8mhUDinBDAZx9s5sWD59uA5puezmNjeqKksJ_7mhc2d6iqHJLkaLTwRw1kfBYYT_nZECaijRBLRkP0cOM2iq8MiPqUgxhZeg.jpg&quot; width=&quot;1200&quot; height=&quot;630&quot; loading=&quot;eager&quot; /&gt;
  &lt;div class=&quot;link_preview_title&quot;&gt;Building a Blog in &lt;mark class=&quot;highlight&quot;&gt;TanStack&lt;/mark&gt; (Part 1 of 2)&lt;/div&gt;
  &lt;div class=&quot;link_preview_description&quot;&gt;&lt;mark class=&quot;highlight&quot;&gt;TanStack&lt;/mark&gt; &lt;mark class=&quot;highlight&quot;&gt;Start&lt;/mark&gt; is one of the newest web frameworks, and its popularity is rising quickly. &lt;mark class=&quot;highlight&quot;&gt;Start&lt;/mark&gt; is a thin server-side layer that sits atop &lt;mark class=&quot;highlight&quot;&gt;TanStack&lt;/mark&gt; Router and provides features like server functions, API endpoints, and server-side rendering. I wrote a three…&lt;/div&gt;
&lt;/a&gt;</content:encoded></item></channel></rss>