0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

React hooksとuseStateや仮想DOM 周りの話

Posted at

この記事では、私がuseStateや仮想DOMついて学習した内容を、自分の理解のためにも、発信してます。間違ってたりしたら教えてください。

そもそもstateとは

state(ステート)=「コンポーネントが今どういう状態にあるか」を表す変数
であります。
Reactのコンポーネントって、「入力(props)」と「状態(state)」から「見た目(JSX)」を作り出す仕組みになっています。
props → 外から渡される値(親コンポーネントから)
state → コンポーネント自身の中で持っている「変化するデータ」

普通の変数なら下記のように書けますよね

//JavaScript//
let count = 0;
count = count + 1;
console.log(count); // 1

でもReactのコンポーネントは「UIと変数を同期してくれる」特殊な世界なので、
単なる変数を変えてもReactは「UIを更新する必要がある」と気づかないんです。
なので、useStateを使うと、Reactに「この値はUIに関係する状態だから、変わったら再描画してね」と伝えられます。
なので、useStateを使って、「今の値」と「値を更新して再レンダリングを依頼する関数」を定義します。

Reactのレンダリングの流れ

先ほど述べたように、Reactコンポーネントは基本的に「state(状態)やprops(外部からの値)」に基づいてUIを描画します。
流れとしては、以下の通りです。

1 : stateやpropsが変化する

2 : Reactがそのコンポーネントの関数をもう一度呼び出す(再レンダリング)

3 : その結果のJSXをもとに新しい仮想DOM(Virtual DOM)ツリーを作る

4 : Reactが前回の仮想DOMとの差分(diff)を計算して、実際のDOMを最小限更新する→これによりメモリは消費するが、動作が早い

つまり、「stateやpropsが変わる」=「レンダリング(再評価)トリガー」がかかる、という仕組みなんです。

よくある誤解

「仮想DOMの値が変わればReactが勝手にレンダリングしてくれる」

これは間違い
仮想DOMは、あくまで「Reactがレンダリング時に作る一時的なオブジェクトツリー」であり、
React自体は「いつ再レンダリングするか」をstateやpropsの変更をトリガーに判断しています。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?