๐ก ํจ์์ ์ฌ์ฌ์ฉ์ ์ํด ์ฌ์ฉํ๋ Hook
๐ก useCallback์ ํจ์๋ฅผ ํธ์ถ์ ํ์ง ์๋ Hook์ด ์๋๋ผ, ๊ทธ์ ๋ฉ๋ชจ๋ฆฌ ์ด๋๊ฐ์ ํจ์๋ฅผ ๊บผ๋ด์ ํธ์ถํ๋ Hook
-ํจ์๋ฅผ ๋ฐ๋ณตํด์ ์์ฑํ์ง ์๊ธฐ ์ํด์ ์ฌ์ฉํ๋ ๊ฒ์ด ์๋
๐ก useCallback์ ์ฐธ์กฐ ๋๋ฑ์ฑ์ ์์กด
์ฐธ์กฐ๋๋ฑ์ฑ
React๋ ๋ฆฌ๋ ๋๋ง ์ ํจ์๋ฅผ ์๋ก ๋ง๋ค์ด์ ํธ์ถ
๊ธฐ์กด์ ํจ์์ ๊ฐ์ง ์์(๊ฐ์ ์ฃผ์๋ฅผ ๊ณต์ ํ์ง ์์)
โ React ์ปดํฌ๋ํธ ํจ์ ๋ด์์ ๋ค๋ฅธ ํจ์์ ์ธ์๋ก ๋๊ธฐ๊ฑฐ๋ ์์ ์ปดํฌ๋ํธ์ prop์ผ๋ก ๋๊ธธ ๋ ์ฌ์ฉ
//App.js
import { useState, useCallback } from "react";
import List from "./List";
export default function App() {
const [input, setInput] = useState(1);
const handleChange = (event) => {
if (Number(event.target.value)) {
setInput(Number(event.target.value));
}
};
const getItems = useCallback(() => {
return [input + 10, input + 100];
}, [input]);
return (
<>
<div className="wall-paper">
<input
type="number"
value={input}
onChange={handleChange}
/>
<List getItems={getItems} />
</div>
</>
);
}
//List.js
import { useState, useEffect } from "react";
function List({ getItems }) {
const [items, setItems] = useState([]);
useEffect(() => {
setItems(getItems());
}, [getItems]);
return (
<div>
{items.map((item) => (
<div key={item}>{item}</div>
))}
</div>
);
}
export default List;