Как таковой, ваш компонент будет делать запрос API только один раз. И эта логика выполняется в componentDidMount()
. Это событие lifecycle
, которое выполняется сразу после первого рендеринга компонента и никогда больше.
componentDidMount() {
this.getImageId();
}
Логика componentDidUpdate()
, которую вы прокомментировали, создает бесконечный цикл. Сначала ваш начальный getImageId()
вызов выполняется в componentDidMount()
. Он делает запрос API, затем отвечает некоторыми данными, и вы обновляете состояние компонента этими данными.
В любое время, когда состояние или реквизит обновляются, вы запускаете componentDidUpdate()
. И, как в настоящее время построено, ваш componentDidUpdate()
вызывает getImageId()
, что обновляет состояние, которое затем запускает componentDidUpdate()
, которое затем вызывает getImageId()
, что ... вы получаете картину.
Вы можете обойти это. Если вы хотите совершать повторяющиеся вызовы в API только тогда, когда новый src
передается в качестве поддержки от вашего родителя. Сделайте это вместо:
componentDidUpdate(prevProps){
if(this.props.src !== prevProps.src){
this.getImageId()
}
}
Так что теперь вы делаете новый запрос только при наличии обновленного src
.