ReactでのComponentのStyle
ReactでCSSやるときに気をつけること
Component分割とCSSの共存をいかにやるか
そのComponent自体は装飾系のStyleのみを施す
#WIP
親がpaddingを制御する
https://qiita.com/uhyo/items/e51fd3850b6a0a3d055a
Server Componentsが出てきた時代には、
Componentの分割仕方が、パフォーマンスと密接するようになってしまった
ここにかくことではないかもな
見出し&コンテンツの、Componentの分割の仕方も悩み
code:ts
<Section>
<H2>こんにちは</H2>
<P>こんにちは、おはようおはよう、こんばんわ</P>
</Section>
<Section>
...
</Section>
↑全く同じ文章で、この塊を再利用したいことがある
このときのComponentの分割の仕方が難しい
同じレイアウトだが、特殊対応しているときなど
案
<Section>...</Section>をまるごと分ける
cons: Section, H2, Pのstyleが散らばってしまう
このfeature専用のSection, H2, Pを定義して、それを再利用する
まあこれかな、という感じはするmrsekut.icon
pbfになっていればうまく機能しそう
Reactでchildrenでなんかをだしたいとき
<P>{children}</P>
このときのPのサイズって、「子のサイズによって決まる」べきってこともあるんだよな
例えばModalとか
<Modal></Modal>自体はサイズのことは知らなくて良い
子のサイズによって決まってくれればいい
これはこれで微妙だなmrsekut.icon
そうなるとchilden自体は絶対値指定しないといけなくなる
となると、そのchildrenに相当するComponentは使用する場所が固定されるということを意味してしまう
Componentのwidthをどう指定するかに背く
となると、やはりModal自体にheigt/width的なpropsをもたせるなりして、親で指定すべき、という気がする
https://zenn.dev/neet/articles/f25abb616ec105
hタグをどう扱うか
Component内で適当にh4とかに定めると使われるケースによっては不適切になる
解決策として、使われている箇所のHのlevelを取得して自動でincrementする<H>を作るなどする
Componentの責務を意識する
https://blog.uhy.ooo/entry/2020-12-19/css-component-design/
Interfaceはその責務を明確にする役割を持つ
classNameをpropsに持ち、外部からstyleを変更できるようにするのは、そのやり方としてかなり難易度が高いので、やるべきでない
結果的に保守性の低下に繋がる
正しいっちゃ正しいのだが、難しいのでやるべきでない、という感じmrsekut.icon
「どんなスタイルが来ても対応できます!」を実行できるような内部実装でないといけなくなる
パターンどんだけ多いねん、になる
classNameのような抽象的なInterfaceを取るのではなく、colorなどの具体的なInterfaceを定義したほうが良い
そうすれば、「このComponentは、色の表示の仕方も責務に持つ」ということが明確になる
https://www.gabe.pizza/notes-on-component-libraries/#components-probably-shouldnt-expose-code-classlanguage-textclassnamecode-or-code-classlanguage-textstylecode-props
classNameやstyleは公開すべきではない
どうしても必要な場合は代わりに、UNSAFE_classNameを公開するなど
これ、責務の決め方にも依るよなあ、と最近思ってるmrsekut.icon
headless uiのように、機能に全振りしたものであれば、classNameを公開することが前提になる
大枠の装飾だけの目的でならclassName公開しても良い気もする
内部を触ってこないなら大丈夫、という場合は多そう
レイアウトに関するスタイルは一箇所で書くようにする
ペアになるようなスタイル
Flex ContainerとFlex Item
code:display:flec.js
const StyledWrapper = styled.div`
display: flex;
& > .hoge {
flex: 〇〇;
}
`;
例を知りたい #??
positionのrelative/absoluteとかも?
https://blog.uhy.ooo/entry/2020-10-15/react-paired-css/
レイアウトに関するHTMLタグは一箇所で書く
上のやつのHTML版
例
thとtd
liとdtとdd
ReactやAngular、VueなどでComponentのスタイリング時に抑えておきたいこと
https://zenn.dev/takepepe/articles/context-custom-hooks
https://zenn.dev/takepepe/articles/adjacent-sibling-combinator-atoms
https://qiita.com/seya/items/8814e905693f00cdade2
ReactのComponent設計
https://blog.ojisan.io/s-c-refactor/