generated at
Layoutコンポーネント

>@dan_abramov: top react skill to learn in 2023

コンポーネントの配置のみに責務を持つコンポーネント
この呼び方は正式名称ではなくkoushisa概念化するために勝手にそう呼び始めた
追記: 2023/08/16
koushisaとほぼ同じ思想の記事
>コンポーネントの分類
> ロジックコンポーネント
> レイアウトコンポーネント
> ブロックコンポーネント
> インラインコンポーネント
>~
>ルート以外のレイアウトコンポーネントは基本的に width: 100%, height: 100%; margin: 0; padding: 0; box-sizing: border-box; で display: grid or display: flex。 grid 推奨

実装イメージ
RootがLayoutコンポーネントを配置するとして、

LayoutコンポーネントはReactNodeを活用する
Layoutコンポーネントはコンポーネント結合の橋渡し役になる
<UserList users={users} Item={(user) => <UserItem user={user}/>} />
同じステートを共有するが、空間や関心が別のコンポーネントを疎結合に作れる
各コンポーネントのpropsの構造を作成する責務はLayoutの親
propsバケツリレーを程度解決できる
たとえば孫コンポーネントへのprops指定も、Layoutへ委譲できる
コンポーネントの配置とレイアウト及びスタイリングの分離
HTML, CSS, GridなどをLayoutコンポーネントの中に閉じ込める
Tailwindの黒魔術もある程度閉じ込められる
殆どのコンポーネントが参照透過性を持つようになるので、Storybookとかテスト容易性的にもメリットがある
関数型プログラミングっぽい感じにできる
Pipeline Operatorのように中間状態を排除して状態伝播したりとか
local reasoningしたりとか
副作用は最初と最後に寄せるを実現できるのが嬉しい
The State Initializer PatternLifting state upと組み合わせると綺麗なコンポーネントツリーを作りやすい

React Docsでも似たような説明があった気がする


---
コンポーネントを疎結合にする目的であればNavigation Stateを経由するという手もある
App Routerでは、React Server Componentsのクライアントサイドの状態管理にcookieやurlが使える

ちなみに、この責務をサーバー側に移したのがServer-Driven UI