useMemo
: ํน์ ๊ฒฐ๊ณผ๊ฐ์ ์ฌ์ฌ์ฉ ํ ๋ ์ฌ์ฉuseCallback
: ํน์ ํจ์๋ฅผ ์๋ก ๋ง๋ค์ง ์๊ณ ์ฌ์ฌ์ฉํ ๋ ์ฌ์ฉApp.js
์์ ๊ตฌํํ๋ onCreate
, onRemove
, onToggle
ํจ์ ํ์ธ๋์ค์ ์ปดํฌ๋ํธ์์ props๊ฐ ๋ฐ๋์ง ์์ผ๋ฉด Virtual DOM์์ ์๋ก ๋ ๋๋ง ํ์ง ์๊ณ ์ปดํฌ๋ํธ์ ๊ฒฐ๊ณผ๋ฌผ์ ์ฌ์ฌ์ฉํ๋ ์ต์ ํ ์์ ์ ํ ์์
โ ๊ทธ๋ฌ๋ฏ๋ก ์ต์ ํ ์์ ์ ์ํด ํจ์ ์ฌ์ฌ์ฉํ๋ ๊ฒ์ด ํ์
// App.js
const onCreate = () => {
const user = {
id: nextId.current,
username,
email,
};
setUser(users.concat(user));
setInputs({
username: '',
email: '',
});
nextId.current += 1;
};
const onRemove = (id) => {
setUser(users.filter(user => user.id !== id));
};
const onToggle = (id) => {
setUsers(
users.map((user) => user.id ? { ...user, active: !user.active } : user)
);
};
useCallback
์ ์ฌ์ฉํ์ฌ ์ฝ๋ ๋ฆฌํฉํ ๋งprops
๊ฐ ์๋ค๋ฉด, deps
๋ฐฐ์ด ์์ ๋ฃ์ด์ผ ํ๋ค.deps
๋ฐฐ์ด ์์ ํจ์์์ ์ฌ์ฉํ๋ ๊ฐ์ ๋ฃ์ง ์์ผ๋ฉด, ํจ์ ๋ด์์ ํด๋น ๊ฐ๋ค์ ์ฐธ์กฐํ ๋ ๊ฐ์ฅ ์ต์ ๊ฐ์ ์ฐธ์กฐ ํ ๊ฒ์ด๊ณ ๋ณด์ฅํ ์ ์๋ค.props
๋ก ๋ฐ์์จ ํจ์๊ฐ ์์ ๊ฒฝ์ฐ์๋ deps
๋ฐฐ์ด์ ๋ฃ์ด์ผ ํ๋ค. // App.js
const onCreate = useCallback(() => {
const user = {
id: nextId.current,
username,
email,
};
setUser(users.concat(user));
setInputs({
username: '',
email: '',
});
nextId.current += 1;
}, [users, username, email]);
const onRemove = useCallback((id) => {
setUser(users.filter(user => user.id !== id));
}, [users]);
const onToggle = useCallback((id) => {
setUsers(
users.map((user) => user.id ? { ...user, active: !user.active } : user)
);
}, [users]);
useCallback
์ useMemo
๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ง๋ค์ด์ก๋ค.const onToggle = useMemo(() => () => {
// ...
}, [users])
โ useCallback
์ ์ฌ์ฉํ์ฌ ๋ฐ๋ก ์ด๋ค๋ผ ์ ์๋ ๋์ ๋๋ ์ต์ ํ๋ ์๋ค.
์ฐธ๊ณ