React Server Components

React Server Componentsの挙動を理解するべくサンプルを作ってみました。

npx create-next-app@latest my-rsc-app –ts –experimental-app

まずは実行画面ですが、「Load Users」ボタンを押すと、Alice,Bobといったユーザのリストが表示されるといったものです。
/_rsc に対するレスポンスがRSCペイロードと呼ばれるものです。

page.tsx

UserList.tsx

users/page.tsx

UserCard.tsx

ただ、これではフレームワークがいろいろとやってくれているので、ペイロードを受け取ったあとどのように表示されるのか、よくわかりません。なぜ_rscを呼んでいるのか、AliceやBobといったテキストが_rscのレスポンスになかったりと・・

そこで、下記動画で紹介されている方法で、明示的にペイロードを受け取りレンダリングしている様子がわかる部分を確認してみました。

https://github.com/bholmesdev/simple-rsc

app/_client.jsx

app/page.jsx

server.js

起動

node server.js

renderToReadableStream で、生成されたRSCペイロードをcreateFromFetchでレンダーする部分がよく理解できます。
Honoを使っていることで、ローレベルの挙動がわかりやすくなっています。
esbuildでトランスパイラしたファイルをimportしたりと、日頃Next.jsなどに慣れていると、見えない部分的の挙動がわかります。

これをもっとシンプルな形に作り替えようと思いましたが、ライブラリのバージョン違いなどにより思ったようにビルドできず諦めました。
simple-rsc自体依存性を無視したインストール方法をとっています。

npm i –legacy-peer-deps

最初のプロジェクトも –experimental-app フラグをつけたりしていますので、まだあまりクリーンな形で実装できないのかもしれません。
しかしいろいろと勉強になるコードでした。