useMemo와 useCallback 모두 리랜더링될 때 다시 실행하지 않아도 되는 함수를 기억하고 재사용하기 위해 사용된다. 때문에 리랜더링 중 연산을 줄여주어 성능을 최적화할 수 있다.
useMemo(함수, [deps 배열]);
useCallback(함수, [deps 배열]);
useMemo(함수, [여기있는 값이 바뀌면 다시실행])
: 첫번째 인자로 담은 함수를 실행하고 리턴 값을 기억해둔다. deps배열에 담긴 값이 바뀌기 전까지만 기억한다.// 랜더링 될 때마다 아래를 실행하지만, lottoNumbers 값을 매번 바꾸고 싶지는 않다.
const lottoNumbers = useMemo(() => getWinNumbers(), []);
const [winNumbers, setWinNumbers] = useState(lottoNumbers);
useCallback(함수, [여기있는 값이 바뀌면 다시실행])
const onClickRedo = useCallback(() => {
setWinNumbers(getWinNumbers());
timeouts.current = [];
}, [winNumbers]);