避難ハッチ
このページでは、React で DOM を扱う際に便利な仕組みについて学びましょう。
避難ハッチがなぜ必要なのか?
React とは?で触れたように、本サイトでは React の DOM 実装を扱っていますが、ここまで触れてきた React の機能だけでは、ブラウザーがサポートする HTML 要素や、イベントを扱うことが難しい場面があるのです。React は、そういった「React の外のシステム」を扱うために便利な機能を提供しています。
もちろん、ここで扱う仕組みを使わずに、これまで学んだ仕組みで実現できるなら、それを優先すべきです!
それでは、避難ハッチの内容を進めていきましょう。
理解度チェック
学んだことを思い出しながら、折りたたみを展開して書かれているキーポイントが自分の理解と合っているか確認しましょう。
値を記憶したいけどレンダーをトリガーさせない方法
ref を使えば、レンダーをトリガーさせずに値を書き換え(ミューテーション)ることができます。
ref で値を参照するで学びましょう。
React から DOM を操作する方法
次の方法で DOM を操作できます:
- ref をコンポーネント内で宣言する
- DOM を参照したい HTML 要素の ref 属性に 1. を渡す
-
- が null ではないことを確認する
ref で DOM を操作するで学びましょう。
React の外のシステムをレンダーに使用する方法
エフェクト (Effect) を使用します。
エフェクトを使って同期を行うで学びましょう。
エフェクトが要らないケース
次のケースではエフェクトは不要です。
- レンダーに使用する値を JavaScript 式で変換したいケース。const 値に代入すれば実現できます。
- ユーザーの入力に起因するイベント処理には、イベントハンドラーを使用します。
そのエフェクトは不要かもで学びましょう。
エフェクトのライフサイクル
エフェクトからイベントを分離する方法
エフェクトで同期する対象を特定の変数ではなく、イベントにしたいときは、useEffectEvent を使用します。
エフェクトからイベントを分離するで学びましょう。
エフェクトから依存する値を減らす方法
次のようにして依存する値を減らせます:
- 参照する値を state や ref ではなく const 定数にする
- そのエフェクトは不要かもと疑う
- エフェクトからイベントを分離する
- props や state に依存しないオブジェクトと関数はコンポーネントの外に移動する
- props や state に依存するオブジェクトと関数はエフェクトのコードの中に移動する
- オブジェクトや関数ではなく文字列や数値などのプリミティブ(原始的)な値に依存するようにする
エフェクトから依存値を取り除くで学びましょう。
React の外のシステムとの処理を再利用可能にする方法
カスタムフックにすることで再利用可能にできます。
カスタムフックでロジックを再利用するで学びましょう。