강의

멘토링

로드맵

인프런 커뮤니티 질문&답변

songso96님의 프로필 이미지
songso96

작성한 질문수

타입스크립트로 배우는 리액트(React.js) : 기초부터 최신 기술까지 완벽하게

Context API 리렌더링

Context API 리랜더링 방지를 위한 Memoization에 대한 질문

작성

·

15

0

계속해서 학습을 진행중인데, 함수값을 넘길때에는 useCallback을 사용해야한다는 것으로 알고있었는데,
>>밑에는 실제 강의 중 공유해 주신 ContextProvider 안에 함수들

const increment = () => {
      setCount((count) => count + 1);
    };
    const decrement = () => {
      setCount((count) => count - 1);
    };
    const reset = () => {
      setCount(0);
    };

    const memoization = useMemo(()=>({
      increment, decrement, reset
    }),[]);

>>제가 생각했던 방식

const increment = useCallback(() => {
      setCount((count) => count + 1);
    },[]);
    const decrement = useCallback(() => {
      setCount((count) => count - 1);
    },[]);
    const reset = useCallback(() => {
      setCount(0);
    },[]);

    const memoization = useMemo(()=>({
      increment, decrement, reset
    }),[increment, decrement, reset]);

저는 밑에 memoization 변수를 빼고 바로 useCallback을 이용해서 객체값으로 넘겨주는 식으로 작성해야 한다고 생각을 했었습니다. 코드를 작성하는 방법에는 정답은 없지만, 당장은 기본에 입각한 학습을 해야하기에 어떤 방법이 조금 더 효율적인지 여쭤보고 싶습니다.

답변 1

0

안녕하세요, 인프런 AI 인턴입니다. songso96님.

Context API 사용 시, 함수형 컴포넌트를 전달하기 위해 useCallbackuseMemo를 활용하여 리렌더링을 방지하는 방법에 대해 질문을 주셨는데요. 각 방식이 언제 더 효과적인지 궁금하신 것 같습니다.

두 방법의 차이점과 추천 방식:

  1. useCallback 사용:

    • useCallback은 특정 함수가 호출되는 빈도를 줄이기 위해 사용됩니다. 즉, 의존성 배열이 변경되지 않는 한, 이미 생성된 함수를 재사용함으로써 불필요한 함수 재생성을 방지할 수 있습니다.
    • 이는 함수가 콜백으로 사용되거나, 자주 변경되어서는 안 되는 상황에서 유용합니다.
  2. useMemo 사용:

    • 함수들을 객체로 묶어 한꺼번에 전달하는 경우, useMemo를 사용하는 접근 방식도 효율적입니다. 이 방법은 함수들을 그룹화하여 객체로 일관되게 관리할 수 있습니다.
    • useMemo는 생성된 객체가 의존성 배열에 의해 데이터 변화를 감지해야 하는 상황에서 특히 효과적입니다.

효율적 사용:

  • 함수가 개별적으로 필요하다면 useCallback을 사용하여 필요할 때만 함수 인스턴스를 생성하도록 하는 것이 좋습니다.
  • 여러 개의 함수를 객체로 묶어 전달해야 하거나, 객체 전체가 자주 업데이트되지 않아야 한다면 useMemo를 활용하여 묶음 객체를 캐싱하는 전략이 유용합니다.

이와 관련된 추가적인 학습을 도와드릴 수 있는 참고 링크를 아래에 추천드립니다:

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

songso96님의 프로필 이미지
songso96

작성한 질문수

질문하기