Есть хук 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 не входил в рекурсию. Но каким образом он в ней может войти? Объясните подробнее что действительно происходит?