construtor vs componentWillMount; o que um componentWillMount pode fazer que um construtor não pode?
Até onde pude ver, a única coisa que umcomponentWillMount
pode fazer e umconstructor
não pode é ligarsetState
.
componentWillMount() {
setState({ isLoaded: false });
}
Desde que não ligamosrender
ainda, umsetState
nocomponentWillMount
preparará o objeto de estado antes de inserirmos o primeirorender()
passar. Que é essencialmente a mesma coisa que umconstructor
faz:
constructor(props) {
super(props);
this.state = { isLoaded: false };
}
Mas vejo outro caso de uso em quecomponentWillMount
é útil (no lado do servidor).
Vamos considerar algo assíncrono:
componentWillMount() {
myAsyncMethod(params, (result) => {
this.setState({ data: result });
})
}
Aqui não podemos usar oconstructor
como atribuição athis.state
não vai dispararrender()
.
SobresetState
nocomponentWillMount
? De acordo comReagir documentos:
componentWillMount()
é chamado imediatamente antes da montagem. É chamado antesrender(
), portanto, definir o estado nesse método não acionará uma nova renderização. Evite introduzir efeitos colaterais ou assinaturas nesse método.
Então, aqui acho que o React usará o novo valor do estado para a primeira renderização e evita uma nova renderização.
Questão 1: Isso significa, por dentrocomponentWillMount
, se chamarmossetState
no retorno de chamada de um método assíncrono (pode ser um retorno de promessa), Reactbloqueia a renderização inicial até que o retorno de chamada seja executado?
Tendo essa configuração ativadalado do cliente (sim, vejo que o caso de uso na renderização do lado do servidor), se eu assumir que o acima é verdadeiro, não verei nada até que meu método assíncrono seja concluído.
Estou faltando algum conceito?
Questão 2: Existem outros casos de uso que posso obter comcomponentWillMount
somente, mas não usando oconstructor
ecomponentDidMount
?