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
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
ken7253
January 22, 2024
Programming
1
290
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
66
CSS polyfill とその未来
ken7253
0
250
Browser and UI #2 HTML/ARIA
ken7253
2
320
PEPCは何を変えようとしていたのか
ken7253
3
530
Browser and UI #1 CSS
ken7253
0
150
レビューのやり方を(ちょっと)整理した話
ken7253
1
580
オーバーロード関数の話 @Mita.ts #2
ken7253
0
150
フロントエンドカンファレンス北海道参加レポート
ken7253
0
80
カスタムHooksと単体テストの共通点について
ken7253
0
460
Other Decks in Programming
See All in Programming
Understanding Apache Lucene - More than just full-text search
spinscale
0
140
How to stabilize UI tests using XCTest
akkeylab
0
140
Mastering Event Sourcing: Your Parents Holidayed in Yugoslavia
super_marek
0
110
AWS×クラウドネイティブソフトウェア設計 / AWS x Cloud-Native Software Design
nrslib
16
3.4k
Everything Claude Code OSS詳細 — 5層構造の中身と導入方法
targe
0
150
安いハードウェアでVulkan
fadis
1
800
ベクトル検索のフィルタを用いた機械学習モデルとの統合 / python-meetup-fukuoka-06-vector-attr
monochromegane
2
540
仕様漏れ実装漏れをなくすトレーサビリティAI基盤のご紹介
orgachem
PRO
7
3.1k
見せてもらおうか、 OpenSearchの性能とやらを!
shunta27
1
140
脱 雰囲気実装!AgentCoreを良い感じにWEBアプリケーションに組み込むために
takuyay0ne
3
400
Reactive ❤️ Loom: A Forbidden Love Story
franz1981
2
170
存在論的プログラミング: 時間と存在を記述する
koriym
5
500
Featured
See All Featured
Mind Mapping
helmedeiros
PRO
1
130
The Illustrated Guide to Node.js - THAT Conference 2024
reverentgeek
1
320
Data-driven link building: lessons from a $708K investment (BrightonSEO talk)
szymonslowik
1
980
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
199
73k
Prompt Engineering for Job Search
mfonobong
0
230
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
2.7k
Fashionably flexible responsive web design (full day workshop)
malarkey
408
66k
30 Presentation Tips
portentint
PRO
1
260
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
61k
ラッコキーワード サービス紹介資料
rakko
1
2.8M
How STYLIGHT went responsive
nonsquared
100
6k
Context Engineering - Making Every Token Count
addyosmani
9
770
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はレンダリングの仕組みを知ることが大切