Хук колбека (useCallback)

useCallback - Возвращает мемоизированный колбэк.

Мемоизация (запоминание, от англ. memoization) — в программировании сохранение результатов выполнения функций для предотвращения повторных вычислений. Это один из способов оптимизации, применяемый для увеличения скорости выполнения компьютерных программ. Перед вызовом функции проверяется, вызывалась ли функция ранее:

  • если не вызывалась, то функция вызывается, и результат её выполнения сохраняется;

  • если вызывалась, то используется сохранённый результат.

useCallback принимает в качестве аргументов встроенный колбэк и массив зависимостей. Возвращает мемоизированную версию колбэка, который изменяется только, если изменяются значения одной из зависимостей:

const memoizedCallback = useCallback(
  () => {
    doSomething(a, b);
  },
  [a, b],
);

Пример:

function renderInput() {
  const [value, setValue] = useState();
  const [secondInput, setSecondInput] = useState();
  const callbackCach = useCallback(e => setValue(e.target.value), []);
  return (
    <div>
      <h1>Callbacks caching examples:</h1>

      <div className="part">
        <h3>Using useCallback hook:</h3>
        <Input onChange={callbackCach} />
        <p>Input value is: {value}</p>
      </div>

      <div className="part">
        <h3>Without useCallback hook:</h3>
        <Input onChange={e => setSecondInput(e.target.value)} />
        <p>Input value is: {secondInput}</p>
      </div>
    </div>
  );
}

В этом примере useCallback возвращает закешированную функцию (то есть ссылка не изменяется от рендера к рендеру). Помимо функции, которую нужно кешировать, в нее передан второй аргумент — пустой массив. Этот массив позволяет передать список полей, при изменении которых необходимо изменить функцию, т.е. вернуть новую ссылку.

Last updated

Was this helpful?