なぜReactはUIとロジックを分けて考えるのか?初心者が腑に落ちた理由

プログラミング学習

「ReactではUIとロジックを分けて考えましょう」
学習を始めると、ほぼ確実に言われるこの言葉。

しかし、JavaScriptでDOM操作を学んできた人ほど、
「結局どこで何を書けばいいのか分からない」
「JSだけで書いていた頃と何が違うのか理解できない」
と感じるのではないでしょうか。

私自身、これまで肉体労働中心の仕事をしてきましたが、未経験からIT企業へ転職することになり、TypeScriptとReactの学習を始めました。
ToDoリストをDOM操作で実装していた頃は、UIもロジックもすべてJavaScriptに書くのが当たり前だと思っていました。

ですが、Reactの思想をDOM操作の経験と照らし合わせたとき、
「ああ、だから分けるのか」
と腑に落ちた瞬間がありました。

結論から言うと、ReactがUIとロジックを分けるのは、
状態の変化に強いアプリを作るためです。


なぜUIとロジックを分けないと辛くなるのか

DOM操作ではUIとロジックが密結合になりやすい

素のJavaScriptでToDoリストを作ると、以下のような流れになります。

  • 配列を更新する
  • DOMを削除する
  • 新しくDOMを作成する
  • ボタンにイベントを付ける

このとき、
「どこで何を表示しているのか」
「どこで状態を変更しているのか」
が同じファイル、同じ関数内に混在しがちです。

最初は動いていても、機能が増えるにつれて
修正するたびに全体を把握し直す必要が出てくる
という状態になります。


状態と表示が混ざるとバグの原因になる

UIとロジックが分かれていないと、
「表示は変わったのに、中身は変わっていない」
「配列は更新されたのに、画面は変わらない」
といったズレが起こります。

DOM操作でよくある、

  • イベントが消える
  • 古い値を参照してしまう
  • どこで状態が変わったのか分からない

といった問題は、設計の段階で無理が出ているケースが多いです。


Reactは「UI=状態の結果」と考える

Reactの基本思想

Reactでは、UIを次のように考えます。

UIは状態(state)の結果として自動的に決まるもの

つまり、
「この状態なら、このUIになる」
というルールを定義しておき、
実際の表示切り替えはReactに任せます。

これにより、開発者は
「今どう表示するか」ではなく「状態をどう変えるか」
に集中できるようになります。


DOM全削除+再描画を安全に行っている

以前作成したToDoリストでは、

document.querySelectorAll("p").forEach((p) => p.remove());

というように、一度DOMをすべて削除してから作り直していました。

Reactも内部的には、
「前のUIをもとに差分を計算して再描画する」
という処理を行っています。

違いは、

  • DOM操作を自分で書かなくていい
  • 状態とUIの対応関係が明確
    という点です。

UIとロジックを分けると何が変わるのか

ロジックは「状態をどう変えるか」だけを書く

Reactでは、ロジックは次のような責務に集中します。

  • データを追加・削除する
  • true / false を切り替える
  • APIの結果を受け取る

表示の切り替えは、
「この状態ならこのUI」
という宣言的な書き方に任せます。

そのため、コードを読んだときに
「何が起きているか」 が追いやすくなります。


UIは「見た目の定義」に専念できる

UI側では、

  • 配列をmapで回す
  • 条件によって表示を変える

といった処理だけを書きます。

イベント処理の中でDOMを探し回る必要がなくなり、
「このコンポーネントは何を表示しているのか」
が一目で分かるようになります。


DOM操作経験者ほどReactの考え方は理解しやすい

一見すると、ReactはDOM操作を隠していて難しそうに見えます。
しかし実際は、DOM操作で苦労してきたポイントを、
先回りして解決してくれている仕組み です。

  • 再レンダリングでイベントが消える問題
  • UIとデータのズレ
  • 状態管理の複雑化

これらを、
「UIとロジックを分ける」
という設計でまとめて解決しています。


まとめ

ReactがUIとロジックを分けて考える理由は、
コードを綺麗に見せるためではありません。

  • 状態管理をシンプルにする
  • UIの再描画を安全に行う
  • 変更に強いアプリを作る

これらを実現するための考え方です。

DOM操作でToDoリストを作った経験がある人ほど、
Reactの思想は必ず腑に落ちます。

コメント

タイトルとURLをコピーしました