ReactとReduxについて(About React and Redux)
概要
Summarizing what I learned about React and Redux
React
React, Javascript 周辺の用語
- Babel 新しい仕様の JavaScript や JSX、TypeScript のコードを古いブラウザでも実行可能な JavaScript にコンパイルするコンパイラー
- webpack コンパイラと連携しつつ大量のソースコードファイルをひとつにまとめ、種々の最適化を施す bundler
- react-dom DOM を抽象化して React から操作できるようにするレンダラーのパッケージ
- jest オールインワンの javascript テスティングフレームワーク
コンポーネント
https://projects.wojtekmaj.pl/react-lifecycle-methods-diagram/
コンポーネントで大事な要素 • Props 親コンポーネントから受け取る値 • Local State コンポーネント自身が内部に持つ状態 • ライフサイクル 初期化されてマウントされレンダリングされ、何らかの処理が行われて再レンダリングされたりして、最後にアンマウントされるまでの過程
React Hooks
useEffect
何かコンポネントのライフサイクル内でない処理をスケジュールするときに使う。 API 呼び出しやタイマーを設定するなど。
useContext
“data tunneling” or “prop drilling"といった親コンポーネントから深い階層の子コンポーネントに props をバケツリレーのように運んでいかなければならないという問題があった。 この問題を解消するため、UserContext.Provider 内であればどこからでも使えるデータにしたのが useContext である。 コンテクストを使うとアプリケーションの複雑性が増すため真に application 全体で使う状態(user 情報や auth key など)にのみ使うようにした方が良い。 Redux のように機能するので一緒に使うのはあまりお勧めではない。
useRef
レンダリングサイクルが終わった後にも保持したい state がある場合は ref を使う。 ref が保持している値が変わっても再描画はされない。
useReducer
useState と成し遂げることは同じで違うやり方を取る hook、redux の reducer と同じ。 action と state を引数に取り action を state に適用する。 useState を比べて一見複雑に見えるが、state が変更するケースを全て一覧でみれるという利点がある。 単体テストも全てのケースの書きやすくなる。
useMemo
計算量が多い関数などを特定の値が変わるまで再評価しないようにするために使う。 例えばフィボナッチ数列を再起的に計算する関数など。 アプリでパフォーマンスの問題が発生した場合に使うことを推奨し事前に使うことは複雑性を増すことになるのでお勧めしない。
const fibonacci = (n) => {
if (n <= 1) {
return 1;
}
return fibonacci(n - 1) + fibonacci(n - 2);
};
useMemo(() => fibonacci(num), [num]);
useCallback
関数を受け取り dependency に変更ない限りは同じ関数を呼び出すようにし re ー render を防ぐもの useMemo と似ており内部的には useMemo が使われている。
useLayoutEffect
useEffect とほぼ同じだが useEffect がいつスケジュールされるか分からないのに対し component が update されたすぐ後に実行されるという確約がある点で異なる。 animation などでイベントの後すぐに実行しなければならない関数などがある場合に使う。
Code Splitting
コードの使う部分だけを load することを可能にする技術。 全てのコードが一度に bundle されるのを防げるためデータ量の削減、パフォーマンス向上に役に立つ。