1
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が動く仕組み】第5弾:stateで画面が更新される仕組み (レンダリングとは)

1
Posted at

【Reactが動く仕組み】シリーズ

Reactでコードを書いて、アプリは作れる。
でも、「どうやって動いているのか?」と聞かれると、言葉にできない…。
一歩踏み出して、「裏側の仕組みを理解して説明できる」を目指したシリーズです。

全7弾で以下の内容を記載予定です。
1.Node.js(実行環境)
2.ビルド(構築の流れ)
3.Babel / polyfill(変換)
4.DOM / 仮想DOM(仕組み)
5.レンダリング(動き)
6.再レンダリング(なぜ起きる?)
7.最適化(どう見極める?)

今回はその第5弾として、「レンダリング」について整理していきます。

はじめに

第4弾では、DOMと仮想DOMについて整理しました。
👉 Reactは仮想DOMを使って、DOM操作を効率化している
という話でした。
 
ではここで、Reactを書いていると必ず出てくるこの現象
「stateを変えると画面が更新される」
 
これ、よく使っているけど…
👉 実際には裏で何が起きているのでしょうか?

この記事でわかること

  • レンダリングとは何か
  • state変更で何が起きているのか
  • Reactが画面を更新する流れ

思ってたイメージ(ちょっと違う)

まず、最初のイメージ

stateが変わる

画面が書き換わる

👉 間違いではないですが、かなり省略された理解でした。

実際に起きていること

実際は、
 
stateが変わる
 ↓
コンポーネントが再実行される
 ↓
仮想DOMが再生成される
 ↓
差分を比較
 ↓
必要な部分だけDOM更新
 
「stateが変わると再レンダリングが起きる」という正体はこれです

レンダリングとは何か

レンダリングとは一言でいうと、
👉 UIを生成する処理のこと

ここで重要なのが
「画面に描画すること」だけではない

Reactにおけるレンダリングは
👉 コンポーネントから仮想DOMを生成する処理を指す

stateが変わると何が起きるのか

例:

const [count, setCount] = useState(0);

return <h1>{count}</h1>;

ボタンで setCount(1) を呼ぶと
 
① stateが更新される
 count = 1になる
 
② コンポーネント関数が再実行される
 App() がもう一度呼ばれる

 ここが重要☆
 👉 Reactは「関数をもう一回実行」している
 👉 その結果として、新しいUIが作られる
 
③ 新しい仮想DOMが作られる

<h1>1</h1>

 
④ 前回との差分を比較
 0 → 1 に変わった
 
⑤ 必要な部分だけ更新
 テキストだけ書き換え

なぜこの仕組みが良いのか

もしReactがなかった場合
👉 自分でやる必要がある

どこが変わったか判断
 ↓
DOM操作を書く

Reactでは
👉 「状態だけ」自分で変える。
👉 あとは、第4弾で見た「差分管理」を、自動でやってくれる。

誤解しやすい(誤解してた)ポイント

❌ stateが変わると即DOM更新される

正しくは

:white_check_mark: state変更 → 再レンダリング → 差分更新

まとめ

  • レンダリングとは、UIを生成する処理
  • Reactでは、コンポーネント関数が再実行されることを指す
  • stateが変わると、仮想DOMが再生成される
  • 差分比較によって、必要な部分だけDOMが更新される

👉 Reactは「状態の変化」をもとにUIを再構築している

第6弾に向けて

ここまでで、レンダリングの流れは見えてきました。

では次に気になるのが
👉 「なぜ再レンダリングが起きるのか?」

次回は「再レンダリング」をテーマに、
無駄な再描画やその仕組みについて整理していきます。

1
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
1
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?