UseMemo
useMemo
- κ°μ λ©λͺ¨μ΄μ μ΄μ ν¨
- νΉνλ μ€λ 걸리λ, μμμ λ§μ΄ μλͺ¨νλ μ°μ°μΌ κ²½μ°, μ»΄ν¬λνΈ λ λλ§ μλ§λ€ ν΄λΉ μ°μ°μ νλ κ²μ λ°λμ§νμ§ μμ.
- λ°λΌμ useMemoμμλ μμ‘΄μ± λ°°μ΄μ νΉμ κ°μ λ£μ΄μ, νΉμ κ°μ΄ λ°λλ κ²½μ°μλ§ ν΄λΉ μ°μ°μ΄ μ΄λ€μ§λλ‘ ν μ μλ€.
useMemoκ° μλ μ½λ
const FilterComponent = () => {
const [query, setQuery] = useState("");
const [count, setCount] = useState(0);
const filtered = ITEMS.filter((item) => {
console.log("νν° μ¬κ³μ°");
return item.name.toLowerCase().includes(query.toLowerCase());
});
return (
<>
<input value={query} onChange={(e) => setQuery(e.target.value)} />
{filtered.map((item) => (
<div key={item.id}>{item.name}</div>
))}
<button onClick={() => setCount((c) => c + 1)}>+count</button>
<div>{count}</div>
</>
);
};
useMemoλ₯Ό νμ©ν μ½λ
const FilterComponent = () => {
const [query, setQuery] = useState("");
const [count, setCount] = useState(0);
const filtered = useMemo(() => {
console.log("νν° μ¬κ³μ°");
return ITEMS.filter((item) =>
item.name.toLowerCase().includes(query.toLowerCase())
);
}, [query]);
return (
<>
<input value={query} onChange={(e) => setQuery(e.target.value)} />
{filtered.map((item) => (
<div key={item.id}>{item.name}</div>
))}
<button onClick={() => setCount((c) => c + 1)}>+count</button>
<div>{count}</div>
</>
);
};
- queryκ° λ°λ λμλ§ νν° μ¬μ€ν
- countλ₯Ό ν΄λ¦ν΄λ 리λ λλ§μ΄ λμ§λ§, filteredμ λν κ³μ°μ μ€ν΅νλ€.
- μ¦, μμ‘΄μ± λ°°μ΄λ‘ λ£μ queryμ κ°μ΄ λ°λμ§ μμΌλ©΄ μ΄μ μ κ²μ°λ μΊμλ₯Ό κ·Έλλ‘ λ°ννλ κ²μ΄λ€.