이 연습에서는 useMemo
의 기능을 이해하기 위해 useMemo
를 살펴보겠습니다.
여기에는 useEffect
와 useCallback
에서 본 것과 유사하게 배열을 반환하는 함수와 종속성 배열을 받는 useMemo
함수가 있습니다.
export const Component = () => {
const autoGeneratedIds = useMemo<() => string[]>(() => {
// generate 100 random string uuid's
return Array.from({ length: 100 }, () =>
Math.random().toString(36).substr(2, 9)
);
}, []);
type test = Expect<Equal<typeof autoGeneratedIds, string[]>>;
};
이 코드의 목표는 100개의 무작위 UUID 문자열을 생성하고 컴포넌트가 시작될 때 이 작업이 한번만 수행되도록 하는 것입니다.
하지만 문자열 배열을 반환하는 대신 문자열 배열을 반환하는 ‘함수’를 반환합니다.
useMemo
의 타입 시그니쳐를 자세히 살펴보고 실제 API를 타입 측면에서 이해하여 문제를 조사하는 것이 과제입니다.
발견한 내용을 바탕으로 코드를 업데이트하여 테스트가 예상대로 통과되도록 합니다.
useMemo
의 반환 타입 지정 또는 추론
이 연습의 시작 코드에서는 문자열 배열을 타입 인수로 반환하는 함수를 useMemo
에 전달하고 있습니다. 이것이 useCallback
으로 수행해야 하는 작업이지만 이 상황에서는 올바르지 않습니다.
const autoGeneratedIds = useMemo<() => string[]>(() => {
...
useMemo
's TypingCMD + Click
을 사용하여 useMemo
의 데피니션을 살펴보면, 매개 변수가 없는 팩토리 함수가 T
타입을 반환하는 것을 볼 수 있습니다.
function useMemo<T>(factory: () => T, deps: DependencyList | undefined): T;