Так же, как setState в компонентах класса, созданных расширением React.Component
или React.PureComponent
, обновление состояния с использованием средства обновления, предоставляемого хуком useState
, также асинхронно и не будет немедленно отражать и обновлять, но вызовет повторную визуализацию
setMovies(result);
console.log(movies) // movies here will not be updated
Если вы хотите выполнить действие по обновлению состояния, вам нужно использовать ловушку useEffect, очень похожую на использование componentDidUpdate
в компонентах класса, так как установщик, возвращаемый useState, не имеет шаблона обратного вызова
useEffect(() => {
// action on update of movies
}, [movies]);
Что касается синтаксиса для обновления состояния, setMovies(result)
заменит предыдущее значение movies
в состоянии теми, которые доступны из асинхронного запроса
Однако, если вы хотите объединить ответ с ранее существовавшими значениями, вы должны использовать синтаксис обратного вызова для обновления состояния вместе с правильным использованием синтаксиса распространения, такого как
setMovies(prevMovies => ([...prevMovies, ...result]));