Насколько я мог видеть, единственное, что может сделать componentWillMount, а constructor не может вызвать setState.
componentWillMount() {
setState({ isLoaded: false });
}
Так как мы еще не назвали render, a setState in componentWillMount подготовит объект состояния до того, как мы введем первый проход render(). Это, по сути, то же самое, что и constructor:
constructor(props) {
super(props);
this.state = { isLoaded: false };
}
Но я вижу другой вариант использования, когда componentWillMount полезен (на стороне сервера).
Давайте рассмотрим что-то асинхронное:
componentWillMount() {
myAsyncMethod(params, (result) => {
this.setState({ data: result });
})
}
Здесь мы не можем использовать constructor, поскольку назначение this.state не вызывает render().
Как насчет setState в componentWillMount? Согласно React docs:
componentWillMount()вызывается непосредственно перед установкой. Это вызывается доrender(), поэтому установка состояния в этом методе будет не запускать повторную визуализацию. Избегайте введения каких-либо побочных эффектов или подписки в этом методе.
Итак, здесь я думаю, что React будет использовать новое значение состояния для первого рендеринга и избегает повторной рендеринга.
Вопрос 1: Означает ли это, внутри componentWillMount, если мы вызываем setState в обратном вызове асинхронного метода (может быть обратным вызовом обетования), React блокирует начальный рендеринг пока не будет выполнен обратный вызов?
Наличие этой настройки на стороне клиента (да, я вижу этот вариант использования в рендеринге на стороне сервера), если я предполагаю, что это верно, я ничего не увижу до тех пор, пока не завершится мой асинхронный метод.
Мне не хватает каких-либо концепций?
Вопрос 2: Являются ли какие-либо другие варианты использования, которые я могу достичь только с помощью componentWillMount, но не используя constructor и componentDidMount?