UI上で提供したい機能が複数コンポーネントを持ちたい場合どうするか
最近miyamonz.iconが思ったことを雑に書く
3D上の設定を、各種DOM経由(ドロワーやモーダル等)からいじる
それに応じて3Dの設定ができる
特定の制御したい設定、機能があり
それは、コンポーネント単位ではない
機能は以下を有する
いくつかのコンポーネント
fetchによる某
状態
なので、これらを返すようなhooksとして実装するのが適切である
機能を利用する大枠コンポーネントがある
機能が大枠にたいしてどのようにやり取りをするか、ここを設計する必要がある
ここが適切だと、機能のインターフェースを共通化でき、大枠のコンポーネント内は、素直にこのインターフェースとやり取りをするだけで、機能を配置、利用できる
新しい機能追加が楽になる
HTMLから発展して宣言的UI,Reactが使われている以上、コンポーネントは階層的である。
なんらかのUIが提供したい機能は、コンポーネントが1つに閉じ込められるとは限らない
以上より、機能は、上の例のように複数のコンポーネントを持ったり、状態をもったり、副作用を持ったりするにせよ、それを"使う"側もコンポーネントである
ただし、モーダルのような機能の場合、たいてい、absoluteなdivを追いて一時的にグローバルに(body直下で一番手前)出せば良いことが多く
reactの場合は、portalを使って、無理やりコンポーネント一つでこれを実現できる例が多い
実際、可能であるならば、コンポーネントとして機能が提供できる方が自然である
なので、可能ならそのほうが良いと思う
また、複数のコンポーネントを配置する場合でも、素直に複数のコンポーネントをおけばいいだけの場合がほとんど
「機能」というまとまりを抽象して、機能を複数まとめて配置したい、インターフェースを共通化して、利用する側の詳細を記述したくないというケースでないと、以上のような抽象を行う必要性は出てこない
ただ、このパターンを採用していないから、設定があっちらこっちらに隠れてて探しにくい、というようなことが起きているようにも思う