React Server Components w/ Next.js 現状
canary.13でキャッシュのパージをするようになったがそれで無限ループを起こしている
面倒で報告できてない
pages/_app.tsxにそれっぽいやつが降ってくるのでそれを引き渡して使う
はよContextに対応してくれreact-server
しかしreact-server-dom-webpackを見ると新しくなってないっぽくてだめ
なってねー
Server Componentは(Contextを受けずに)自分が常にRootとして描画されることを考えないといけないから意図的に対応してないんじゃなかろうか?
RFC読んだほうがよさそう
getServerSidePropsが動作はするが,環境がmiddlewareと同じなのでresponseが{}になってて壊れており,{ notFound: true }を返すとUnhandled rejectionを投げた後何も返ってこなくなる これはwebランタイム(いわゆる Edge Function)の結果
いやresult == nullって404なんですよ
データ取得が完了する前にいろいろ生成して送ってしまっているわけで……
それはそれとして明らかにページの主要なコンテンツに相当するデータが存在しない場合App Shellすら送るべきではないはずで,これは何とかしないといけないはず HTTPErrorみたいなやつが最上位まで行ったらうまいことハンドルしてやるとかならうまくいきそう
何となくErrorをthrowしたら500は返せた
デバッガーアタッチしたけど変な挙動して何も見えない
ハンドルできてる場所はなさそう
HeadをClient Componentとしてラップして参照すればいい?と思うが,後述の理由でだめ
現状<Head/>の中身を集めるオブジェクトをContextで取り回してrenderToStringしてからhead描画→body描画としているが,Streaming SSRだとこの前提が崩壊してしまうのでうまくいかないという感じ
正確に取り回すには最初の(Suspenseで囲まれていない部分の)出力を待ってから解析を進めればいいが,描画部分の設計を大きく書き直す必要がありそう(現状の実装だと今の描画パイプラインとバチバチに競合して地獄になる) どの結果をheadの描画で使うべきみたいな戦略の話は↑のステータスコードと大体同じで,Suspenseで待たない部分がそのページで最も重要なデータであると考えればよさそう 公式でも議論されてた
サーバー側がちゃんとストリーミングをしているのにもかかわらず,クライアントがres.text()してしまってる
createFromFetchにフェイクのResponseを渡していたりしてなんか不穏な感じのコードである
Responseはstateとして管理されることが想定されているように見えるのになあ……
Client Componentでdefault export以外使えない
生成してるmanifestが雑すぎる(See: .next/server/middleware-flight-manifest.js)