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
なぜuseEffectは悪者扱いされるのか 〜 useEffectを作ってみて〜
Search
iWonder118
October 02, 2026
53
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
なぜuseEffectは悪者扱いされるのか 〜 useEffectを作ってみて〜
iWonder118
October 02, 2026
More Decks by iWonder118
See All by iWonder118
極小Reactで描画を理解しながら追う
iwonder118
0
89
マフィアを目指そう※超健全
iwonder118
0
250
Tamagawa.dev #3 OP&ED
iwonder118
0
280
経験談から伝える! AIによって既に変わってしまった転職事情
iwonder118
7
3.8k
多摩川.dev #2 OP&ED
iwonder118
0
67
「積極的_無職のすすめ」ー U39
iwonder118
0
310
多摩川.dev OP&ED
iwonder118
0
380
今更RSCについてのお話 Full RSC vs RSC as Data Next.jsとTanStack Start比較
iwonder118
0
44
React Tokyo フェス 2026 の裏側
iwonder118
1
670
Featured
See All Featured
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
18k
Bootstrapping a Software Product
garrettdimon
PRO
306
120k
For a Future-Friendly Web
brad_frost
183
10k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
3k
Winning Ecommerce Organic Search in an AI Era - #searchnstuff2025
aleyda
2
2.2k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.8k
How To Speak Unicorn (iThemes Webinar)
marktimemedia
1
590
Leo the Paperboy
mayatellez
10
2.3k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.6k
Six Lessons from altMBA
skipperchong
29
4.5k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
33
5.1k
Highjacked: Video Game Concept Design
rkendrick25
PRO
1
470
Transcript
なぜuseEffectは悪者扱いされるのか 〜 useEffectを作ってみて〜 React Tokyo Meetup #21 2026/10/02
自己紹介 河村 直樹(@iwonder118) 化粧品事業会社でWebエンジニアをしてます 東急多摩川駅でTamagawa.devというのをやってます React Tokyo運営、その他諸々カンファレンススタッフ
アジェンダ - これをやろうと思った背景 - React の描画をおさらい - 各セクションのお話 - useEffectのお話
- デバックで追ってみる※出来たら
これをやろうと思った背景 フロントエンド &PHPカンファレンス北海道に行った
これをやろうと思った背景 JSXを作るセッションとソースコードリーディングのハンズオンに参加
これをやろうと思った背景 西村さんありがとうございます
これをやろうと思った背景 最近Vue.jsをやることになり Chibi Vueで入門
これをやろうと思った背景 Reactも意外と小さくできるのでは?
これをやろうと思った背景 実際にあった (Build your own React ) https://pomb.us/build-your-own-react/
これをやろうと思った背景 とはいえ量があったのでもっと小さく
これをやろうと思った背景 作るものの仕様 - TypeScriptで1ファイルかつ、 100行ほど 300行ほどになってきました - JSXから最終的に DOM操作で画面が更新されるまで (CSR)
- HooksはuseState、useEffect(new!)のみ - Fiberを簡略化 - 双方向リンクノードでなく、配列にて保持かつ、一気に描画処理 - className・onClickのみ対応
これをやろうと思った背景 注意 - 簡易版のため元の Reactとは仕様が異なります - スケジューリング処理がないので描画が重いと固まります - スケジューリングがないので優先度付も行われません -
unMountがないので、 a === b ? <Hello /> : <World />のようなコンポー ネント切り替えができません
これをやろうと思った背景 仕様を元に AIといっしょに作業
これをやろうと思った背景 Flowじゃないの?
これをやろうと思った背景 ごめんなさい
これをやろうと思った背景 暖かく見守ってください
完成図 https://github.com/iwonder118/nano-react
React の描画をおさらい JSXから描画されるまで - Trigger - 初回レンダリングまたは、setter(useState)からイベント発火 - Render -
コンポーネントをjsxからReactElementへの変換 - ReactElementからReactFiberへの変換 - Commit - ReactFiberから実際のDOM操作
各セクションのお話 JSX - tsconfig.jsonで指定 - jsxの設定としてをreact-jsx - jsxIportSourceをnano-reactに設定 - 開発モードのJSXコンパイラが
jsxImportSourceからjsxDEV という名前の関数を自動importする コードを生成する仕様になっている
useEffectのお話 useEffectとは - コンポーネントを外部システムと同期させるための React フック - API呼び出しや、ブラウザ固有の操作(localstorage、クエリパラメータな ど)の副作用を切り出す -
useEffectのお陰でコンポーネントの純粋性が保てる - setup関数と依存配列とsetup関数内で関数をreturnすることでcleanup 関数 - あればcleanup関数->前回と今回の依存配列比較->setup関数実行
useEffectのお話 useEffectが描画とどう絡むのか - 初回描画 - Commit完了後にsetup関数を実行する - setup関数の中にtriggerとなるものがあれば再描画が走る - 再描画
- 依存配列の値を用いて描画後にsetup関数を実行する - 前回の描画の値を保持しているので、その値と比較し、差分があれば setup関数を実行する - 描画自体はuseEffectの担当ではない 。あくまで関数内のsetter
useEffectのお話 useEffectがなぜ悪者扱いされるのか - 副作用の塊だから - 副作用は命令的であるがゆえに確定出来ない - 宣言的UIのレンダリングの邪魔 - レンダリングが
2回動くきっかけになる - useEffectのsetup関数から値保存でTrigger(setter)を呼ぶことで、もう一 度Trigger・Render・Commitが動き、再レンダリング
宣伝
宣伝 チケット &ストア商品発売中 ‼
宣伝 チケット発売中‼ みんな新潟に行こう‼