Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
React 19でお手軽に CSS-in-JSを自作する @yukukotani 2024/10/31 - Nihonbashi.js #9
Slide 2
Slide 2 text
自己紹介 小谷 優空 - @yukukotani ・VP of Technology @ Ubie, Inc. ・Maintainer of KumaUI ・Student @ Univ. Tsukuba
Slide 3
Slide 3 text
CSS-in-JS? JavaScriptコード内でCSSも書ける君。Reactでよく使われる 有名どころは styled-components とか emotion とか
Slide 4
Slide 4 text
作ってみよう
Slide 5
Slide 5 text
簡単ですね style属性を埋め込むだけの高階関数
Slide 6
Slide 6 text
嬉しいですね 色がつきました
Slide 7
Slide 7 text
嬉しくない たくさん描画するとスタイルが重複して、サイズが爆発する
Slide 8
Slide 8 text
そう簡単には作れない 世の中のCSS-in-JSは色々頑張っていX にstyleを差し込んで参照することで同じスタイルをまとめX → useLayoutEffectを使うのでSSRでは動かない b SSRの描画中に必要なstyleをメモしておいて最後に差し込 フレームワークによっては無駄に2回描画関数が走る
Slide 9
Slide 9 text
スタイルシート・・・重複・・・? 聞き覚えが・・・?
Slide 10
Slide 10 text
React 19 で組み込みサポートが拡充 なんか良くなったらしいぞ https://ja.react.dev/blog/2024/04/25/react-19
Slide 11
Slide 11 text
React 19 で組み込みサポートが拡充 インラインでstyleタグを描画すると href属性をキーとして重複排除しながらheadに差し込んでくれる https://ja.react.dev/reference/react-dom/components/style
Slide 12
Slide 12 text
作ってみよう style属性の代わりにstyleタグを差し込み、classNameで重複排除&参照 オブジェクトからCSSに変換 インラインstyleタグを差し込む classでスタイルを参照
Slide 13
Slide 13 text
作ってみよう スタイルシートのハッシュで一意なclassNameを生成 キーをケバブケースにしてるだけ backgroundColor -> background-color
Slide 14
Slide 14 text
嬉しいね headに1つだけstyleを差し込みclassで参照 重複するスタイル定義がなくなっている React が勝手に head に持っていってくれる 同じクラスを参照するだけ
Slide 15
Slide 15 text
本当に重複しないかな? スタイルの一部が動的に決まるコンポーネントを考える background-color を プロパティで変える
Slide 16
Slide 16 text
本当に重複しないかな? プロパティを変えて同時に描画してみる
Slide 17
Slide 17 text
本当に重複しないかな? `color: red;` が全クラスで重複しちゃうね(涙)
Slide 18
Slide 18 text
Atomic CSS にする コンポーネントに必要なスタイルを1つのクラスに押し込めるのではなく、 プロパティと値のペアそれぞれで独立したクラスを作る
Slide 19
Slide 19 text
Atomic CSS にする
Slide 20
Slide 20 text
嬉しいね `color: red;` が1つになった
Slide 21
Slide 21 text
ありがとうございました このテクを使ったライブラリを作ったので使ってね