Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
React 19でお手軽にCSS-in-JSを自作する
Search
Yuku Kotani
December 30, 2024
Programming
1.1k
6
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
React 19でお手軽にCSS-in-JSを自作する
Nihonbashi.js #9
https://nihonbashi-js.connpass.com/event/332328/
Yuku Kotani
December 30, 2024
More Decks by Yuku Kotani
See All by Yuku Kotani
Webとヘルスデータ
yukukotani
1
860
LLM本来の能力を解き放つサンドボックス技術とAI民主化への適用
yukukotani
4
5.5k
一億総業務改善を支える社内AIエージェント基盤の要諦
yukukotani
9
3.7k
MCPとデザインシステムに立脚したデザインと実装の融合
yukukotani
6
3k
Scale out your Claude Code ~自社専用Agentで10xする開発プロセス~
yukukotani
11
6k
AI Coding Agent Enablement in TypeScript
yukukotani
21
21k
AI Coding Agent Enablement - エージェントを自走させよう
yukukotani
14
8.7k
Expoによるアプリ開発の現在地とReact Server Componentsが切り開く未来
yukukotani
3
970
僕が思い描くTypeScriptの未来を勝手に先取りする
yukukotani
12
3.6k
Other Decks in Programming
See All in Programming
半永久的に提供し続けられるプライベートクラウドを目指して ― 利用者の認知負荷を抑えるAPI抽象化とハードウェア世代交代の基盤設計
tomokon
0
470
AI主導のプログラミング学習アプリを作ってみた
econanringo
0
150
プロダクトコードからライブラリの境界を見つける
elmetal
PRO
0
110
難しいけど、読めた。- OSSの入口に立った話。
sts11142
0
150
ジョジョの世界をXRで再現する
mofurune
0
150
CodeRabbitの効果検証と過ごしてみた3ヶ月
armondando
0
210
Turning Architecture into Unit Tests in the AI Era (NSSpain XIV)
steliosf
PRO
1
140
The Rails Doctrine Decade
koic
2
550
自サークルのIdPからログアウトできるようになるまで
taiseiue
1
130
re:Inventに行く前に知っておきたい現地参加のノウハウ
nokomoro3
0
400
HTML-in-Canvasで作る未来のWeb UI表現
clockmaker
1
660
Domain-Driven Transformation
hschwentner
2
2.3k
Featured
See All Featured
Heart Work Chapter 1 - Part 1
lfama
PRO
10
37k
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
B2B Lead Gen: Tactics, Traps & Triumph
marketingsoph
0
270
Neural Spatial Audio Processing for Sound Field Analysis and Control
skoyamalab
0
550
Optimizing for Happiness
mojombo
378
71k
Primal Persuasion: How to Engage the Brain for Learning That Lasts
tmiket
0
490
Future Trends and Review - Lecture 12 - Web Technologies (1019888BNR)
signer
PRO
0
3.8k
Technical Leadership for Architectural Decision Making
baasie
3
600
The #1 spot is gone: here's how to win anyway
tamaranovitovic
4
1.2k
Raft: Consensus for Rubyists
vanstee
142
7.7k
It's Worth the Effort
3n
188
29k
How to train your dragon (web standard)
notwaldorf
96
6.9k
Transcript
React 19でお手軽に CSS-in-JSを自作する @yukukotani 2024/10/31 - Nihonbashi.js #9
自己紹介 小谷 優空 - @yukukotani ・VP of Technology @ Ubie,
Inc. ・Maintainer of KumaUI ・Student @ Univ. Tsukuba
CSS-in-JS? JavaScriptコード内でCSSも書ける君。Reactでよく使われる 有名どころは styled-components とか emotion とか
作ってみよう
簡単ですね style属性を埋め込むだけの高階関数
嬉しいですね 色がつきました
嬉しくない たくさん描画するとスタイルが重複して、サイズが爆発する
そう簡単には作れない 世の中のCSS-in-JSは色々頑張っていX <head>にstyleを差し込んで参照することで同じスタイルをまとめX → useLayoutEffectを使うのでSSRでは動かない b SSRの描画中に必要なstyleをメモしておいて最後に差し込
フレームワークによっては無駄に2回描画関数が走る
スタイルシート・・・重複・・・? 聞き覚えが・・・?
React 19 で組み込みサポートが拡充 なんか良くなったらしいぞ https://ja.react.dev/blog/2024/04/25/react-19
React 19 で組み込みサポートが拡充 インラインでstyleタグを描画すると href属性をキーとして重複排除しながらheadに差し込んでくれる https://ja.react.dev/reference/react-dom/components/style
作ってみよう style属性の代わりにstyleタグを差し込み、classNameで重複排除&参照 オブジェクトからCSSに変換 インラインstyleタグを差し込む classでスタイルを参照
作ってみよう スタイルシートのハッシュで一意なclassNameを生成 キーをケバブケースにしてるだけ backgroundColor -> background-color
嬉しいね headに1つだけstyleを差し込みclassで参照 重複するスタイル定義がなくなっている React が勝手に head に持っていってくれる 同じクラスを参照するだけ
本当に重複しないかな? スタイルの一部が動的に決まるコンポーネントを考える background-color を プロパティで変える
本当に重複しないかな? プロパティを変えて同時に描画してみる
本当に重複しないかな? `color: red;` が全クラスで重複しちゃうね(涙)
Atomic CSS にする コンポーネントに必要なスタイルを1つのクラスに押し込めるのではなく、 プロパティと値のペアそれぞれで独立したクラスを作る
Atomic CSS にする
嬉しいね `color: red;` が1つになった
ありがとうございました このテクを使ったライブラリを作ったので使ってね