React Hooks (useMemo, useCallback)
Goal
前回の
useState
、useEffect
の位置決めに続いて.useMemo
useCallback
について説明します.useMemo
useMemo
コメントの値を返します.const memo = useMemo(() => {
return memoizedValue(value)
}, [value])
useMemo
は、コールバック関数および依存配列を受け入れる.コールバック関数には、
useMemo
が返す値を生成する関数が含まれます.また、依存配列の値が変更された場合にのみ、コメントの値が再計算され、返されます.useMemo
を使用する理由は、高コスト計算を防止するためです.すべてのレンダリングではなく依存性が変更された場合にのみ値が返され、最適化や不要な計算が回避されます.
依存性に空の配列が含まれている場合、レンダーごとに新しい値が計算されます.
useMemo
を使用する場合を例に挙げて説明します.const Example = () => {
const [color, setColor] = useState<string>("");
const [movie, setMovie] = useState<string>("");
const onChange = (e: React.ChangeEvent<HTMLInputElement>) => {
if (e.target.id === "movie") setMovie(e.target.value);
else setColor(e.target.value);
};
const getMovieValue = (movie: string) => {
console.log("영화");
switch (movie) {
case "action":
return "액션";
case "comedy":
return "코미디";
default:
return "로맨스";
}
};
const getColorValue = (color: string) => {
console.log("색깔");
switch (color) {
case "red":
return "빨강";
case "yello":
return "노랑";
default:
return "예쁜 색깔";
}
};
const colorValue = getColorValue(color);
const movieValue = getMovieValue(movie);
return (
<div>
<input onChange={onChange} id="movie" type="text" />
<input onChange={onChange} id="color" type="text" />
<p>{movieValue}</p>
<p>{colorValue}</p>
</div>
);
};
export default Example;
入力映画および色値出力のReact
例.この例を実行すると、次の結果が得られます.
見えましたか.
movie
およびcolor
では、1つの値を変更すると、2つの関数が実行され、console.log
が出力される.上記の例
useMemo
を用いて最適化を行うことができる.const colorValue = useMemo(() => getColorValue(color), [color]);
const movieValue = useMemo(() => getMovieValue(movie), [movie]);
useMemo
を使用すると、最適化が良好であることが確認できます.再計算された関数が現在のように簡単であれば、大きな問題はありませんが、再計算された関数が非常に複雑であれば、不要な高価な費用が発生します.
useMemo
を使用すると、このような不要な高価な費用が発生することを防止することができる.useCallback
useCallback
は、記録された関数を返します.useMemo
との違いは、戻り関数か戻り値かです.const memoizedFuntion = useCallback(fn, deps)
更新Reference
この問題について(React Hooks (useMemo, useCallback)), 我々は、より多くの情報をここで見つけました https://velog.io/@alstnsrl98/React-Hooks-useMemo-useCallback-useRefテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol