>  기사  >  웹 프론트엔드  >  React&#s useCallback Hook 탐색: 심층 분석

React&#s useCallback Hook 탐색: 심층 분석

PHPz
PHPz원래의
2024-09-12 10:32:01592검색

Exploring React

React 애플리케이션은 특히 크기와 복잡성이 증가함에 따라 최고의 성능이 필요합니다. 이전 기사에서는 계산된 값을 메모하고 불필요한 재계산을 방지하기 위한 핵심 후크인 useMemo를 살펴보았습니다. useMemo에 익숙하지 않거나 다시 이해하고 싶은 경우 "React의 useMemo 이해"는 이해력을 높이고 애플리케이션 효율성을 최적화하는 데 유용한 통찰력을 제공합니다. 이 기사를 확인하면 성능 향상을 위한 탄탄한 기초와 실용적인 팁을 얻을 수 있습니다.

이 기사에서는 useMemo의 형제 후크인 useCallback에 초점을 맞추고 이것이 React 구성 요소를 최적화하는 데 어떻게 기여하는지 살펴보겠습니다. useMemo는 일반적으로 함수 결과를 메모하는 데 사용되는 반면, useCallback은 전체 함수를 메모하도록 설계되었습니다. 기능과 useMemo와의 차이점을 자세히 살펴보겠습니다.

useCallback이란 무엇입니까?

기본적으로 useCallback은 종속성이 변경되지 않는 한 모든 렌더링에서 동일한 함수 인스턴스가 반환되도록 함수를 메모하는 React 후크입니다. 이렇게 하면 불필요한 함수 재생성을 방지할 수 있으며, 이는 함수를 하위 구성 요소에 소품으로 전달할 때 특히 유용합니다.

기본적인 예는 다음과 같습니다.

import React, { useState, useCallback } from 'react';

function Parent() {
  const [count, setCount] = useState(0);

  const handleClick = useCallback(() => {
    console.log("Button clicked!");
  }, []);

  return (
    <div>
      <button onClick={handleClick}>Click me</button>
      <p>You've clicked {count} times</p>
    </div>
  );
}

이 예에서는 handlerClick이 메모되었습니다. 종속성이 없으면 구성 요소가 마운트 해제되지 않는 한 다시 생성되지 않습니다. useCallback이 없으면 이 함수는 논리가 변경되지 않은 경우에도 렌더링할 때마다 다시 생성됩니다.

useCallback은 useMemo와 어떻게 다릅니까?

useCallback이 함수를 메모한다면, useMemo는 함수 실행 결과를 메모합니다. 따라서 불필요한 계산이나 작업을 피하는 데에만 관심이 있다면 useMemo가 더 적합할 수 있습니다. 그러나 렌더링할 때마다 새로운 함수 참조가 전달되는 것을 방지하려면 useCallback을 사용하는 것이 좋습니다.

useCallback 사용 사례

  1. 하위 구성요소의 불필요한 재렌더링 방지 useCallback의 일반적인 시나리오는 함수를 하위 구성 요소에 소품으로 전달하는 경우입니다. React는 새 함수 참조가 전달되는 경우를 포함하여 prop이 변경되면 하위 구성 요소를 다시 렌더링합니다. useCallback을 사용하면 종속성이 변경되지 않는 한 동일한 함수 인스턴스가 전달됩니다.
import React, { useState, useCallback } from 'react';

function Child({ onClick }) {
  console.log("Child component rendered");
  return <button onClick={onClick}>Click me</button>;
}

export default function Parent() {
  const [count, setCount] = useState(0);

  const handleClick = useCallback(() => {
    console.log("Button clicked!");
  }, []);

  return (
    <div>
      <Child onClick={handleClick} />
      <button onClick={() => setCount(count + 1)}>Increase count</button>
    </div>
  );
}

여기에는 부모 구성 요소의 상태가 변경될 때 하위 구성 요소가 불필요하게 다시 렌더링되는 것을 방지하기 위해 HandleClick 함수가 메모되어 있습니다. useCallback이 없으면 매번 새 함수 참조가 전달되므로 하위 구성요소는 상위 구성요소가 변경될 때마다 다시 렌더링됩니다.

useMemo와 어떻게 다른가요?

비슷한 시나리오에서는 일부 함수 논리(함수 자체가 아님)의 결과를 하위 항목에 전달해야 하는 경우 useMemo가 사용됩니다. 예를 들어 렌더링할 때마다 다시 계산하는 것을 피하기 위해 비용이 많이 드는 계산을 메모합니다.

  1. 목록에서 이벤트 핸들러 처리 구성 요소 목록을 렌더링할 때 useCallback은 React가 렌더링할 때마다 새 이벤트 핸들러를 생성하는 것을 방지하는 데 유용합니다.
import React, { useState, useCallback } from 'react';

function ListItem({ value, onClick }) {
  return <li onClick={() => onClick(value)}>{value}</li>;
}

export default function ItemList() {
  const [items] = useState([1, 2, 3, 4, 5]);

  const handleItemClick = useCallback((value) => {
    console.log("Item clicked:", value);
  }, []);

  return (
    <ul>
      {items.map(item => (
        <ListItem key={item} value={item} onClick={handleItemClick} />
      ))}
    </ul>
  );
}

이 시나리오에서 useCallback은 각 목록 항목에 대해 함수가 불필요하게 다시 생성되는 것을 방지하여 여러 렌더링에서 handlerItemClick 함수가 동일하게 유지되도록 합니다.

useMemo와 어떻게 다른가요?

이벤트 핸들러를 전달하는 대신 항목(예: 목록의 값 합계)을 기반으로 결과를 계산하는 경우 useMemo가 더 적합할 것입니다. useMemo는 계산된 값을 메모하는 데 사용되는 반면, useCallback은 기능에만 사용됩니다.

콜백 사용 모범 사례

  1. 필요할 때만 사용하세요 useCallback의 가장 큰 함정 중 하나는 그것을 과도하게 사용하는 것입니다. 함수가 간단하고 외부 변수에 의존하지 않는다면 메모할 필요가 없을 수도 있습니다. useCallback을 사용하면 상당한 성능 이점을 제공하지 않고 불필요하게 복잡성이 추가됩니다.
// Unnecessary use of useCallback
const simpleFunction = useCallback(() => {
  console.log("Simple log");
}, []);

이런 경우 종속성이나 계산 오버헤드가 없기 때문에 함수를 메모할 필요가 없습니다.

  1. 종속성을 정확하게 유지하세요 useMemo와 마찬가지로 useCallback은 종속성 배열을 사용하여 메모된 함수를 업데이트해야 하는 시기를 결정합니다. 항상 종속성이 함수 내부에 사용된 값을 정확하게 반영하는지 확인하세요.
const handleClick = useCallback(() => {
  console.log("Clicked with count:", count);
}, [count]); // `count` is a dependency here

메모된 함수는 필요한 종속성이 생략되면 오래된 값을 사용하므로 버그가 발생할 수 있습니다.

결론

useCallback과 useMemo는 모두 React의 성능 최적화를 위한 귀중한 도구이지만 서로 다른 목적으로 사용됩니다. 값비싼 계산 결과를 기억해야 할 때 useMemo를 사용하고, 렌더링 간에 함수 참조가 안정적으로 유지되도록 해야 할 때 useCallback을 사용합니다. 각각의 차이점과 사용 사례를 이해하면 React 애플리케이션을 효과적으로 최적화할 수 있습니다.

useMemo에 대해 더 자세히 알아보려면 React의 useMemo 이해하기에서 전체 기사를 확인하세요.

위 내용은 React&#s useCallback Hook 탐색: 심층 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.