Вопрос проверяет понимание жизненного цикла React-компонента и правильной работы с асинхронными эффектами.
Загрузка данных при монтировании компонента обычно выполняется с помощью useEffect. Эффект с пустым массивом зависимостей запускается один раз после первого рендера. Внутри эффекта вызывается асинхронная функция загрузки данных. Результат сохраняется в состоянии компонента. Такой подход является стандартным для React.
При монтировании компонента React еще не знает о внешних данных, поэтому их загрузка выносится в побочные эффекты.
Наиболее распространенный способ — использование useEffect:
useEffect(() => {
loadData()
}, [])
Этот эффект выполняется только один раз, сразу после добавления компонента в DOM.
Так как useEffect не может быть асинхронным напрямую, обычно используется вспомогательная функция:
useEffect(() => {
const fetchData = async () => {
const response = await fetch('/api/data')
const result = await response.json()
setData(result)
}
fetchData()
}, [])
При загрузке данных важно учитывать несколько состояний:
начальное состояние
состояние загрузки
успешное получение данных
ошибка запроса
Это позволяет избежать некорректного UI и повысить устойчивость приложения.
Загрузка данных при монтировании компонента должна выполняться через эффекты. Четкое разделение логики загрузки и рендера делает код предсказуемым и удобным для сопровождения.