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
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
ken7253
January 22, 2024
Programming
1
270
Reactにおけるkeyの使い方について
社内LT会で発表したスライドです。
Reactではリストレンダリング以外にもkeyの使いどころがあるという話を中心にして、Reactのレンダリングプロセスを学ぶことの重要性を伝えたスライドです。
ken7253
January 22, 2024
Tweet
Share
More Decks by ken7253
See All by ken7253
バンドルサイズを半減させた話 @Browser and UI #3
ken7253
0
58
CSS polyfill とその未来
ken7253
0
240
Browser and UI #2 HTML/ARIA
ken7253
2
310
PEPCは何を変えようとしていたのか
ken7253
3
510
Browser and UI #1 CSS
ken7253
0
140
レビューのやり方を(ちょっと)整理した話
ken7253
1
560
オーバーロード関数の話 @Mita.ts #2
ken7253
0
140
フロントエンドカンファレンス北海道参加レポート
ken7253
0
67
カスタムHooksと単体テストの共通点について
ken7253
0
430
Other Decks in Programming
See All in Programming
AI時代の認知負荷との向き合い方
optfit
0
160
FOSDEM 2026: STUNMESH-go: Building P2P WireGuard Mesh Without Self-Hosted Infrastructure
tjjh89017
0
160
AIによる高速開発をどう制御するか? ガードレール設置で開発速度と品質を両立させたチームの事例
tonkotsuboy_com
7
2.3k
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
550
Amazon Bedrockを活用したRAGの品質管理パイプライン構築
tosuri13
4
460
KIKI_MBSD Cybersecurity Challenges 2025
ikema
0
1.3k
AI Schema Enrichment for your Oracle AI Database
thatjeffsmith
0
270
Basic Architectures
denyspoltorak
0
670
インターン生でもAuth0で認証基盤刷新が出来るのか
taku271
0
190
フルサイクルエンジニアリングをAI Agentで全自動化したい 〜構想と現在地〜
kamina_zzz
0
400
[KNOTS 2026登壇資料]AIで拡張‧交差する プロダクト開発のプロセス および携わるメンバーの役割
hisatake
0
280
Data-Centric Kaggle
isax1015
2
770
Featured
See All Featured
[SF Ruby Conf 2025] Rails X
palkan
1
750
More Than Pixels: Becoming A User Experience Designer
marktimemedia
3
320
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
49
9.9k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
9.9k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
1.7k
The Straight Up "How To Draw Better" Workshop
denniskardys
239
140k
Abbi's Birthday
coloredviolet
1
4.7k
Large-scale JavaScript Application Architecture
addyosmani
515
110k
How To Stay Up To Date on Web Technology
chriscoyier
791
250k
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
2
410
Why Your Marketing Sucks and What You Can Do About It - Sophie Logan
marketingsoph
0
73
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.7k
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はレンダリングの仕組みを知ることが大切