MofuMofu2 / react-sandbox

React.js Sandbox
1 stars 0 forks source link

7-6 関数、またはその結果をメモ化する – memo/useMemo/useCallback関数 #71

Closed MofuMofu2 closed 9 months ago

MofuMofu2 commented 10 months ago

メモ化ってそもそもどういうことや、というところから。

https://react.dev/reference/react/memo

MofuMofu2 commented 9 months ago

関数呼び出しの結果をキャッシュしておき、あとで再利用することをメモ化(memoization)と言います。

memoization(memo - i(/aɪ/) -zation)って一般的な言葉なのかと思って調べたが、プログラム高速化の手法と出てきたので専門用語っぽい。(Wikipedia

この辺とか分かりやすそう。Oreillyとかだと本とCourseしかなくて発音がわからなかった。プログラムの解説はYoutubeでも英語の方が強いなと思う。日本語だと胡散臭い系が多いな…と思って…。

React.devには次のように書いてある。

memo lets you skip re-rendering a component when its props are unchanged.

props ar unchangedなのでpropsが変わらないときはコンポーネントの再レンダリングをスキップする。ということになる。

でも本のNoteには

メモ化はしなくてもよいならすべきではありません

と書いてある。メモ化でコードが複雑になるようだが、どうなるんだろうか。 オーバーエンジニアリングするな、という印象を受けた。

MofuMofu2 commented 9 months ago

useMemoを使うと、依存しているステートに関するレンダリングはそのステートが更新される何かがキックされないと再レンダリングされないことがわかった。

しかし無闇に使うとバグりそうだし、かえってパフォーマンスが悪くなりそう。これは乱用しないほうがいいやつだなと思った。