Все в теле функционального компонента будет запускаться при каждом рендеринге. Изменение на useEffect
является правильным решением этой проблемы.
Это не работает для вас, потому что useEffect
принимает массив в качестве второго параметра, а не объект . Измените его на []
, и он будет работать только один раз.
useEffect(() => {
getActorInfo(id).then(val => setActorInfo(val));
}, []);
Это будет эквивалентно основанному на классе componentDidMount
.
Если ваш хук имеет зависимость, вы добавить его в массив. Затем эффект проверит, изменилось ли что-нибудь в вашем массиве зависимостей, и запустит ловушку, только если он имеет.
useEffect(() => {
// You may want to check that id is truthy first
if (id) {
getActorInfo(id).then(val => setActorInfo(val));
}
}, [id]);
Полученный эффект будет запущен при любых изменениях id
и вызовет только getActorInfo
, если id
является правдой. Это эквивалентно классам componentDidMount
и componentDidUpdate
.
Подробнее о хуке useEffect
можно прочитать здесь .