React useState useEffect useContext

React

上の例では再レンダリングが発生しない。理由は、Reactが状態変数の変更を検出できなず差分が分からないため。
Reactは、状態が変更されたことを検出するために、状態更新関数(この場合はsetCount)を使う。状態更新関数を使って状態を変更することで、Reactが状態の変更(差分)を検出し、コンポーネントを再レンダリングすることができる。

上記例ではcountが変更される度にuseEffectが実行される。[count]は依存配列と呼ばれる。

上記例はアンチパターン以下解説
countの初期値は0。
コンポーネントがレンダリングされ、useEffectが実行。
useEffect内で、console.log(“hello”)が実行され、setCount(count + 1)によりcountが1に更新。
countが更新されたので、useEffectが再度実行(依存配列にcountが指定されているため)。
useEffect内で、再びcountを更新(この時点でcountは2)。
このプロセスが繰り返され、無限ループが発生。

useContext説明

GakeCodeContext.Providerを使用してgakecodeInfoオブジェクトをコンポーネントツリーに提供する目的は、コンポーネント間で共有したいデータを簡単にアクセスできるようにするためです。

従来の方法では、プロパティ(props)を介してデータを子コンポーネントに渡す必要がありますが、非効率的です。

コンテキストシステムは、GakeCodeContext.Providerを使ってデータを提供することで、コンポーネントツリー内のどのコンポーネントでも、useContext(GakeCodeContext)フックを使ってそのデータにアクセスできます。これにより、データを必要とするコンポーネントだけがデータにアクセスでき、かつ親から子へとプロパティを継続的に渡す必要がなくなります。

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