はじめに
このシリーズは、Reactの公式ページなどから特に重要と感じたトピックを選び出し、何度でも読み返せるよう簡潔にまとめたものです。
進捗管理には「いいね」か「ブックマーク」がお勧め
さらに僕のモチベーションアップになります!よろしくお願いいたします!
再レンダリングのタイミング
再レンダリングが起こる主なタイミングは下記の通りです。
1. stateの変更
stateをset関数で更新すると再レンダリングされます。
import React, { useState } from 'react'
export function Counter() {
const [count, setCount] = useState(0)
return (
<div>
<h1>{count}</h1>
<button onClick={() => setCount(count + 1)}>Increment</button>
</div>
);
}
2. 親コンポーネントの再レンダリング
親コンポーネントが再レンダリングされると、子コンポーネントも再レンダリングされます。
import React, { useState } from 'react'
export function ParentComponent() {
const [input, setInput] = useState('')
return (
<div>
<input type="text" value={input} onChange={e => setInput(e.target.value)} />
<ChildComponent />
</div>
);
}
function ChildComponent() {
console.log('レンダリング');
return <p>ChildComponent</p>;
}
レンダリングコストが高い、親コンポーネントの再レンダリングが頻繁な場合は、下記を使用し再レンダリングを抑制することが可能です。
React.memo
propsの参照値が変更されない限り、再レンダリングを抑制できます。
オブジェクト等、例外もあります
useCallback
propsとして渡される関数に用いることで、依存する変数が変更されない限り、再レンダリングを抑制できます。
3. Contextの値が変更された時
対象のContextを利用しているすべてのコンポーネントが再レンダリングされます。
参考サイト
こちらの記事で学ばさせていただきました。
stateの更新による再レンダリング
Contextの更新による再レンダリング
親コンポーネントの再レンダリングによる子コンポーネントの再レンダリング