Both things are true:
1) RSC is one of the most impressive engineering achievements in frontend in a long time, and the people who built it should never have to look for work for more than an hour for the rest of their lives.
2) RSC has a _ton_ of perf footguns, which greatly complicates the mental model you have to carry around. Nested loaders with streaming, and react-query ssr integration is a much, much simpler model, and arguably more powerful.
With TanStack Start + Query you can invalidate one individual piece of data, and have that piece of data re-load in isolation: even if it was fetched during the SSR pass.
It's the best of SPA / SSR in one.
as usual, you're the nicest and most thoughtful person on the internet.
ultimately I think React is the exception to all these rules, and that's where the line should be drawn (under the current status quo / paradigm). an interesting point of reference here is that React is baked into TypeScript itself via the `jsx` compilerOption, so in some sense the "React special case" is prebaked into the ecosystem.
that said, I trust your call here. I just have a reflex reaction whenver it seems like the hypervocal bundle size obsessives are aking things worse for everyone else lol ๐คทโโ๏ธ
And you donโt lose any flexibility
Simply skip prefetching the componentโs queryOptions in the route loader. It will automatically use client-side fetching instead and show the suspense boundary first
Perfect when server-side data fetching is slow and would hurt your TTFB
Honestly, you can get the best of both worlds with TanStack Query and either one of the mentioned frameworks
- Use queryOptions as the contract between your component and route
- No prop drilling
- Data is preloaded on the server, but your component stays fully self-contained
Every other framework splits components so their concerns are in two places
- in the render function
- and their data requirements in the route loader
RSC is the only one that lets you create a component that fetches its own data serverside
With TanStack Start it gets even better
You can define the full server handler right next to the component with createServerFn. This way the component is now completely self-sufficient
New in TanStack Start: Deferred Hydration.
Choose when selected parts of your app hydrate, like when they become visible, get interacted with, or the browser goes idle.
@AnthropicAI The fact that it's so difficult to speak to an actual human agent or simply write a message instead of selecting a few options is a terrible customer experience
My God, the @AnthropicAI chatbot is horrendous!
I accidentally paid twice for the Claude Pro subscription and want a refund for one payment without canceling my subscription. The AI agent simply won't allow it!
@AnthropicAI I tried subscribing with my credit card, but it showed a payment failed error. I then tried another payment method, which also failed. However, both payments went through, and the pro subscription was activated successfully
@mattpocockuk Great article! Today was my first real attempt at vibe coding a feature, which I planned using Claude.
I was wondering which model you use for "plan modeโ, as I used Opus 4.5, which is quite expensive. Do you use a different model for planning versus executing?
Researchers have found two new vulnerabilities in React Server Components while attempting to exploit the patches last week.
These are new issues, separate from the critical CVE last week. The patch for React2Shell remains effective for the Remote Code Execution exploit.