[Hook] useMemo

강은비·2022λ…„ 1μ›” 12일
0

React

λͺ©λ‘ 보기
12/36
post-custom-banner

react μŠ€ν„°λ””μ—μ„œ λ¦¬μ•‘νŠΈλ₯Ό λ‹€λ£¨λŠ” κΈ°μˆ μ΄λΌλŠ” 책을 μ„ μ •ν–ˆκ³  이 책을 읽고 배운 것을 λ°”νƒ•μœΌλ‘œ μž‘μ„±λ˜μ—ˆλ‹€.


πŸ“Œ useMemo

  • useMemoλ₯Ό μ΄μš©ν•˜λ©΄ ν•¨μˆ˜ μ»΄ν¬λ„ŒνŠΈ λ‚΄λΆ€μ—μ„œ λ°œμƒν•˜λŠ” 연산을 μ΅œμ ν™”ν•  수 μžˆλ‹€.
  • useMemo의 첫번째 인자둜 μ–΄λ–»κ²Œ 연산할지 μ •μ˜ν•˜λŠ” ν•¨μˆ˜λ₯Ό λ„£κ³ , λ‘λ²ˆμ§Έ 인자둜 deps 배열을 λ„£μ–΄μ€€λ‹€.
  • deps λ°°μ—΄ μ•ˆμ— 넣은 λ‚΄μš©μ΄ λ°”λ€Œλ©΄, 첫번째 인자의 ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•˜μ—¬ 연산을 μ§„ν–‰ν•˜κ³ , λ§Œμ•½ λ‚΄μš©μ΄ λ°”λ€Œμ§€ μ•Šμ•˜λ‹€λ©΄ 이전에 μ—°μ‚°ν•œ 값을 μž¬μ‚¬μš©ν•œλ‹€.

μ˜ˆμ‹œ

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 = (e) => {
        setNumber(e.target.value);
    };
    
    const onInsert = () => {
        setList(list.concat(parseInt(number));
        setNumber("");
    }
    
    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>평균값: {getAverage(list)}</div>
        </div>
    );

}
  • 문제점: 숫자λ₯Ό λ“±λ‘ν–ˆμ„ 뿐만 μ•„λ‹ˆλΌ 인풋 λ‚΄μš©μ΄ μˆ˜μ •λ  λ•Œλ„ 평균값을 κ³„μ‚°ν•˜λŠ” ν•¨μˆ˜κ°€ ν˜ΈμΆœλœλ‹€. μ™œλƒν•˜λ©΄ 인풋 λ‚΄μš©μ΄ μˆ˜μ •λ˜μ—ˆμ„ λ•Œ λ¦¬λ Œλ”λ§λ˜λ―€λ‘œ ν•¨μˆ˜κ°€ λ‹€μ‹œ ν˜ΈμΆœλ˜λŠ” 것이닀. ν•˜μ§€λ§Œ 인풋 λ‚΄μš©μ΄ λ°”λ€” λ•Œμ—λŠ” 평균값을 계산할 ν•„μš”κ°€ μ—†λ‹€.
  • useMemoλ₯Ό μ΄μš©ν•˜λ©΄ μ΄λŸ¬ν•œ μž‘μ—…μ„ μ΅œμ ν™”ν•  수 μžˆλ‹€. λ Œλ”λ§ν•˜λŠ” κ³Όμ •μ—μ„œ νŠΉμ • 값이 λ°”λ€Œμ—ˆμ„ λ•Œλ§Œ 연산을 μ‹€ν–‰ν•˜κ³ , μ›ν•˜λŠ” 값이 λ°”λ€Œμ§€ μ•Šμ•˜μ„ λ•ŒλŠ” 이전에 μ—°μ‚°ν–ˆλ˜ κ²°κ³Όλ₯Ό μž¬μ‚¬μš©ν•œλ‹€.
import { useMemo } from "react";
const avg = useMemo(() => getAverage(list), [list]);
// list λ°°μ—΄μ˜ λ‚΄μš©μ΄ λ°”λ€” λ•Œλ§Œ ν•¨μˆ˜ 호좜
post-custom-banner

0개의 λŒ“κΈ€