単方向データフローにサーバーを含める
@rickhanlonii: @dan_abramov It’s like original React changed how we thought about separation of concerns from separating technologies to separating components, and now it’s doing the same for separating the stack. It’s just components all the way down. 現在のフレームワークがどのようにデータ取得に取り組んでいるかを説明する方法として、「単方向のデータフローにサーバーを含める」というのが好きです。 @dan_abramov: @cpt_gigglypants the beautiful thing about RSC to me, is that you still write JavaScript, still use regular component composition, but it spans across server and client as a single mental model. it includes server into the unidirectional data flow. this example is nice: https://t.co/WgkvZgSKfH RSCの美しいところは、JavaScriptを書き、通常のコンポーネント合成を使いながら、サーバーとクライアントにまたがる、ひとつのメンタルモデルであることです。 @dan_abramov: something i want to write a fictional story of react from “another dimension” where it started out server-first, kind of like Rails, and the client features were added later. from that perspective, i think the vision of Server Components might feel clearer. reactがRailsのようにサーバーファーストでスタートし、クライアント機能は後から追加された、という「異次元」からの架空のストーリーを書きたいんです。その視点から見ると、Server Componentsのビジョンがより明確に感じられるかもしれませんね。 @dan_abramov: the router would need to work entirely on the server from the start. one of the first interesting optimizations could be to avoid reloading the entire page when using the Link component. instead it could replace only the parts that changed, like Turbolinks… or like client React. ルーターは、最初から完全にサーバー上で動作する必要があります。最初の興味深い最適化の1つは、リンクコンポーネントを使用する際にページ全体を再読み込みしないようにすることです。
@dan_abramov: being server-only at first means limited client interactivity. similar as happened in practice for Rails, PHP, etc. but it’s also liberating in other ways. you can read data from a data layer without exposing an external API. no REST or GraphQL until you actually need to expose. RailsやPHPなどで実際に起こったことと似ているが、他の点でも解放感がある。外部APIを公開せずにデータレイヤーからデータを読み取ることができる。実際に公開する必要があるまでRESTやGraphQLはない。
@dan_abramov: how do we handle mutations like POST? do we have to add full support for client components for that? not necessarily. the first iteration could just be passing a POST handler function from the server to a <form>. this automatically becomes an RPC call. again, similar to old days. 最初の反復は、サーバから<form>にPOSTハンドラ関数を渡すだけでよいでしょう。
@dan_abramov: let’s see what you get with this so far. you can build an app that fetches and displays data and can navigate to refresh it. navigations don’t reload the page. posting a form is handled on the server and automatically refreshes content. you don’t expose any APIs. データを取得して表示し、ナビゲートして更新できるアプリを作ることができます。ナビゲートではページは再読み込みされません。フォームの投稿はサーバーで処理され、自動的にコンテンツを更新します。