3
respostas

setState callback

Preciso fazer uma busca no callback do setState com o valor que deveria ter atualizado no setState. porém quando entra no callback, o valor da variável que atualizei no setState, ainda não foi atualizado. a especificação orienta a fazer no componentDidUpdate(), porém qualquer alteração no meu DOM iria passar no componentDidUpdate(), certo? e no meu caso, eu qro fazer uma busca no banco de dados, somente no callback da alteração de um combo. Como eu trato essa situação?

3 respostas

opa, acho que nao entendi direito.. vc colocou um evento no combo e, em cada escolha do combo vc quer consumir uma api? Se for isso, pq nao faz exatamente dessa forma?

Eu qro exatamente isso, consumir uma api com o valor alterado no combo.

vou postar meu código.

<select name="combo" 
    value={this.state.combo} 
    onChange={this.setCombo} >
    {
      this.state.combos.map(function(combo) {
          return <option key={combo.id} value={combo.id}>{combo.nome}</option>;
        })
    }
</select>
setCombo(evento){
    this.setState({combo:evento.target.value},     this.carregarOutroCombo());
}

Na função carregarOutroCombo(), o valor do combo não está alterado, e quando mudo novamente o valor do combo, vem o valor anterior, ou seja, me parece que leva um tempo para atualizar,

Resolvi da seguinte forma:

setCombo(evento){
    this.setState({combo:evento.target.value},     function(){
        this.carregarOutroCombo();
    }.bind(this));
}

mas não entendi o prq eu fazendo dessa forma resolveu.

fiquei meio perdido.. de todo jeito, o normal seria que na função carregarOutroCombo vc manipulasse o state.. aí o render seria chamado de novo, já pegando o novo estado do componente.