Проблема, с которой вы столкнулись, происходит потому, что ваш вызов API происходит асинхронно с методами жизненного цикла реагирования. К тому времени, когда ответ API был возвращен, метод render родительского компонента был вызван в первый раз, который отображал дочерний компонент, который, в свою очередь, вызвал компонент, монтируется с реквизитами, передаваемыми ему родителем, прежде чем они были инициализированы с ответом API. данные. Когда результаты API наконец возвращаются и передаются как новые реквизиты дочернему компоненту (результат повторного рендеринга родителей), он не будет запускать жизненный цикл componentWillMount, поскольку он уже смонтирован.
Вы можете решить эту проблему несколькими способами, и это действительно зависит от того, как вы планируете использовать дочерний компонент в будущем. Несколько решений:
1) В методе рендеринга родительских компонентов убедитесь, что не рендерит дочерний компонент, пока не будет получен ответ от API. Это гарантирует, что когда дочерний компонент монтируется в первый раз, у него будут действительные реквизиты для работы. например:
render() {
this.state.value && <Child value={this.state.value} onNotValidId={() => this.renderNewComponent()} />
}
2) Переместить или продублировать (зависит от того, как вы планируете использовать дочерний компонент) логику инициализации дочерних компонентов из / в другой хук жизненного цикла, такой как componentDidUpdate или getDerivedStateFromProps (В зависимости от версии React, которую вы поете)