Асинхронный конструктор является потенциальным антипаттерном, поскольку он не приводит к ожидаемому от него поведению.
Асинхронные побочные эффекты должны возникать после монтирования компонента и, таким образом, возникают в componentDidMount
, этоэто то, для чегоНевозможно отложить жизненный цикл компонента и неправильно думать об этом в следующих терминах.
Он должен работать так:
class Foo extends Component
async a() {...}
async componentDidMount() {
await this.a();
}
render() {
(conditionThatIsTrueWhenThereResult) ? (
<div>...the result from a...</div>
) : (
<div>fallback</div>
);
}
}
Если необходимо поддерживать компонент синхронным,a
Асинхронный побочный эффект должен быть перенесен в родительский компонент, который отображает дочерний элемент только тогда, когда результат из a
готов к использованию.