effect_tw
@effect_tw

Для чего нужен useCallback в данном примере?

Есть хук useHttp - в нём есть функция request , в которой описана логика получения данных с сервера. И так же она обёрнута в useCallback.
Код хука
import {useState, useCallback} from 'react'

export const useHttp = () => {
  const [loading, setLoading] = useState(false)
  const [error, setError] = useState(null)

  const request = useCallback(async (url, method = 'GET', body = null, headers = {}) => {
    setLoading(true)
    try {
      if (body) {
        body = JSON.stringify(body)
        headers['Content-Type'] = 'application/json'
      }

      const response = await fetch(url, {method, body, headers})
      const data = await response.json()

      if (!response.ok) {
        throw new Error(data.message || 'Что-то пошло не так')
      }

      setLoading(false)

      return data
    } catch (e) {
      setLoading(false)
      setError(e.message)
      throw e
    }
  }, [])

  const clearError = useCallback(() => setError(null), [])

  return { loading, request, error, clearError }
}

код использования хука
const {loading, request, error, clearError} = useHttp()

Как я понимаю useCallback используется для того, чтобы оборачивать события, и сохранять ссылку на них после перерендера и соответсвенно при размонтировании компонента удалить обработчик. Но для чего в данном примере оборачивать request в useCallback? Как говорит автор , чтобы react не входил в рекурсию. Но каким образом он в ней может войти? Объясните подробнее что действительно происходит?
  • Вопрос задан
  • 504 просмотра
Решения вопроса 1
miraage
@miraage
Старый прогер
Изменение в хуке = рендер компонента. Если не замемойзить результат, то будет дополнительный вызов рендера.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы