子コンポーネントの無駄な再レンダリングを避けるためにuseReducer
とコンテキストを利用する例。
reducerを使わずuseState
とuseCallback
したハンドラーをコンテキストに渡すことでも同等の処理を実現可能だが、コンテキストに操作が複数あるとそれぞれにuseCallback
する必要がありコードが長くなる。reducerの方が結果としてすっきりするので基本的にuseReducer
を使う方が良さそう。
注意点として、useReducer
が返すdispatch
は一意であることが保証されているが、Context.Provider
に渡すvalue
にdispatch
以外も含める場合にはuseMemo
でメモ化しておく必要がある。
React Developer ToolsのHighlight updates when components render.
を有効にすると再レンダリングの様子がよくわかる。