2021-01-19
GraphQLのクライアント、ApolloよりRelayのほうが色々と思想が良いと思っている
コンポーネント毎にFragmentを定義して、上でまとめてクエリ
必要なら@deferで分割
なんでApolloがよく使われてるのかわからない
TypeScriptのサポートが強いから?
Relayにもサポートある
実際に使ったことまではないから何とも言えないのだが
Relayがexperimentalな仕様をドカドカ投下するのが避けられてるとか?
Facebookの出してる最近の技術
Relay + GraphQL
React Concurrent Mode
React Server Components
これらは別々の技術として考えられがちだが、「データ取得とそれを取り巻く環境の革新」ととらえると実は文脈が繋がっていることがわかる
React Concurrent Modeは「データ取得に関するReactの態度の革新」で、非同期処理を宣言的に取り扱う仕組みを導入することでFacebookの提唱する新しいデータ取得の形(Render-As-You-Fetch)を実現しやすくする
Render-As-You-Fetchを実現するには、コンポーネント構造に関係なく、一気にデータ取得が走ることが望ましい。しかしコンポーネントに必要なデータはそのコンポーネント上に定義したい。そのためにはデータの取得をコンポーネント構造とは関係なく合成し、集約する機構が必要
GraphQLはデータ取得の宣言をクライアント上で任意の単位で集約できるようにするための仕様
Relayはその思想を実装したクライアント
React Server ComponentsはGraphQLを用いないと難しかったデータ取得の集約を、コンポーネントの描画をサーバー側で行うことによって任意のデータソースについて行うことができるようにする仕組み
ReactコンポーネントとBFFを同時に記述すれば{Over,Under}fetchが起きなくて最高だよね!という話ではある
このへんの繋がりは(少なくとも自分の周りの)コミュニティではあんまり認知されていなくて、個々の概念がある種コンテンツとして消費されているという感(恐れ?)がある
一生来ない未来の技術みたいな
備えをしよう!みたいなムーブをあんまり見ないというか
#日記