react ์คํฐ๋์์ ๋ฆฌ์กํธ๋ฅผ ๋ค๋ฃจ๋ ๊ธฐ์ ์ด๋ผ๋ ์ฑ ์ ์ ์ ํ๊ณ ์ด ์ฑ ์ ์ฝ๊ณ ๋ฐฐ์ด ๊ฒ์ ๋ฐํ์ผ๋ก ์์ฑ๋์๋ค.
useMemo
์ ๋น์ทํ๊ฒ ์ฃผ๋ก ๋ ๋๋ง ์ฑ๋ฅ์ ์ต์ ํํด์ผ ํ ๋ ์ฌ์ฉํ๋ค.useCallback
์ ํน์ ํจ์๋ฅผ ์๋ก ๋ง๋ค์ง ์๊ณ ์ฌ์ฌ์ฉํ๊ณ ์ถ์๋ ์ฌ์ฉํ๋ค.deps
๋ฐฐ์ด์ ๋ฃ์ด์ค๋ค.deps
๋ฐฐ์ด ์์ ์๋ ๋ด์ฉ์ด ๋ฐ๋๋ฉด, ์ฒซ๋ฒ์งธ ์ธ์์ ํจ์๋ฅผ ์๋ก ์์ฑํ๊ณ , ์๋๋ฉด ์ด์ ์ ๋ ๋๋ง๋ ๋ ์์ฑํ ํจ์๋ฅผ ์ฌ์ฌ์ฉํ๋ค.deps
์ ๋น ๋ฐฐ์ด์ ๋ฃ๊ฒ ๋๋ฉด, ์ปดํฌ๋ํธ๊ฐ ์ฒ์ ๋ ๋๋ง๋ ๋ ๋ง๋ค์๋ ํจ์๋ฅผ ๊ณ์ ์ฌ์ฌ์ฉํ๋ค.deps
์ธ์์ ์๋ฌด๊ฒ๋ ๋ฃ์ง ์๋๋ค๋ฉด ์ปดํฌ๋ํธ๊ฐ ๋งค๋ฒ ๋ ๋๋ง๋ ๋๋ง๋ค ์ฒซ๋ฒ์งธ ์ธ์์ ํจ์๋ฅผ ์์ฑํ๋ค.import { useState, useMemo, useCallback } from "react";
const getAverage(numbers){
console.log("ํ๊ท ๊ฐ ๊ณ์ฐ์ค...");
if (numbers.length === 0) return 0;
const sum = numbers.reduce((value, number) => value + number);
return sum / numbers.length;
};
const Average = () => {
const [list, setList] = useState([]);
const [number, setNumber] = useState("");
const onChange = useCallback((e) => {
setNumber(e.target.value);
}, []);
const onInsert = useCallback(() => {
setList(list.concat(parseInt(number));
setNumber("");
}, [list, number]);
const avg = useMemo(() => getAverage(list), [list]);
return (
<div>
<input
type="text"
name="number"
value={number}
onChange={onChange}/>
<button onClick={onInsert}>๋ฑ๋ก</button>
<ul>
{list.map((value, index) => (<li key={index}>{value}</li>))}
</ul>
<div>ํ๊ท ๊ฐ: {avg}</div>
</div>
);
}