Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Reactにおけるkeyの使い方について
Search
ken7253
January 22, 2024
Programming
1
160
Reactにおけるkeyの使い方について
社内LT会で発表したスライドです。
Reactではリストレンダリング以外にもkeyの使いどころがあるという話を中心にして、Reactのレンダリングプロセスを学ぶことの重要性を伝えたスライドです。
ken7253
January 22, 2024
Tweet
Share
More Decks by ken7253
See All by ken7253
Browser and UI #2 HTML/ARIA
ken7253
2
180
PEPCは何を変えようとしていたのか
ken7253
3
400
Browser and UI #1 CSS
ken7253
0
78
レビューのやり方を(ちょっと)整理した話
ken7253
1
480
オーバーロード関数の話 @Mita.ts #2
ken7253
0
72
フロントエンドカンファレンス北海道参加レポート
ken7253
0
35
カスタムHooksと単体テストの共通点について
ken7253
0
350
検索エンジン最適化はWebサイトのすべてなのか
ken7253
0
48
使いやすいツールチップを実装する方法
ken7253
0
99
Other Decks in Programming
See All in Programming
生成AI時代のフルスタック開発
kenn
1
260
LRパーサーはいいぞ
ydah
6
1.2k
状態と共に暮らす:ステートフルへの挑戦
ypresto
3
1.2k
開発者フレンドリーで顧客も満足?Platformの秘密
algoartis
0
200
はじめてのPDFKit.pdf
shomakato
0
100
七輪ライブラリー: Claude AI で作る Next.js アプリ
suneo3476
1
190
Orleans + Sekiban + SignalR でリアルタイムWeb作ってみた
tomohisa
0
240
Boost Your Performance and Developer Productivity with Jakarta EE 11
ivargrimstad
0
840
ニーリーQAのこれまでとこれから
nealle
2
760
Bedrock × Confluenceで簡単(?)社内RAG
iharuoru
1
120
GitHub Copilot for Azureを使い倒したい
ymd65536
1
330
読書シェア会 vol.4 『ダイナミックリチーミング 第2版』
kotaro666
0
110
Featured
See All Featured
4 Signs Your Business is Dying
shpigford
183
22k
Why You Should Never Use an ORM
jnunemaker
PRO
56
9.4k
The Straight Up "How To Draw Better" Workshop
denniskardys
233
140k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
120
52k
The Cost Of JavaScript in 2023
addyosmani
49
7.8k
How to Ace a Technical Interview
jacobian
276
23k
Stop Working from a Prison Cell
hatefulcrawdad
268
20k
Making Projects Easy
brettharned
116
6.2k
Unsuck your backbone
ammeep
671
58k
VelocityConf: Rendering Performance Case Studies
addyosmani
329
24k
Intergalactic Javascript Robots from Outer Space
tanoku
271
27k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
507
140k
Transcript
how to use "key" in React Reactにおけるkeyの効果的な使い方について
技術記事を書いたりするのが趣味。 最近はReactを使ったアプリケーションを書いています。 ユーザーインターフェイスやブラウザが好き。 https://github.com/ken7253 https://zenn.dev/ken7253 https://dairoku-studio.com ken7253 Frontend developer
Reactのkeyについて リストを map() とかでレンダリングするときに使う key について。 const list = ['リンゴ',
'バナナ', 'ゴリラ']; return ( <ul> { list.map((v) => <li key={v}>{v}</li>) } </ul> )
実際に起きた出来事 import { CheckList } from "../CheckList"; // 複数のチェックボックスを管理するコンポーネント type
Process = "before" | "after"; // 進行状況 export const App = () => { const [process, setProcess] = useState<Process>('before'); return ( <> { process === 'before' ? <CheckList label="開始前チェックリスト" /> // input[type="checkbox"]が複数並んだコンポーネント : <CheckList label="終了後チェックリスト" /> } <button onClick={ // クリックされた場合次のチェックリストに進む () => setProcess((prev) => prev === 'before' ? 'after' : 'before') } /> </> ) }
コンポーネントを切り替えたはずなのにチェック状態が維持されてしまう
コンポーネントを出し分ける部分の書き方に問題があった。 自分: CheckList コンポーネント自体を再レンダリングしてほしい React:差分のある CheckList[label] のみを更新します 問題があった箇所 { process
=== 'before' ? <CheckList label="開始前チェックリスト" /> // input[type="checkbox"]が複数並んだコンポーネント : <CheckList label="終了後チェックリスト" /> }
key を付けたら治った。 なぜ key を付けてみようと思ったのか Reactのレンダリングにおける差分検知の仕組みを知っていたから 個人的には対処療法のつもりだった 対処方法 { process
=== 'before' ? <CheckList key="before" label="開始前チェックリスト" /> // input[type="checkbox"]が複数並んだコンポーネント : <CheckList key="after" label="終了後チェックリスト" /> }
keyのもう一つの使い方 公式ドキュメントにも記載がある通り、同じようなコンポーネントを出し分ける場合に Stateをリセットする用途としても利用できる。 state の保持とリセット – React
Reactのレンダリングの仕組みについて
Reactのレンダリングの仕組みについて
Reactのレンダリングの仕組みについて
伝えたいこと key は識別子として使える Reactはレンダリングの仕組みを知ることが大切