Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

202
Visualizações
¿Cómo puedo esperar una función pesada en el método del componente React mostrando el spinner?

Quiero mostrar el mensaje "calculando..." durante un cálculo sincrónico pesado en el método del componente React.
Aquí está mi código.
Pero no funciona. Quiero que React llame a render() tanto después del primer setState como del segundo setState.
Pero React lo llama solo después del segundo setState.
¿Cómo puedo cambiar this.state.calculating correctamente?

 // note: this is not async function function myHeavyFunc() {...} class Foo extends React.Components { constructor(props) { super(props); this.state = {calculating: false} this.handleXX = this.handleXX.bind(this); } handleXX() { this.setState({calculating: true}, () => { // first setState new Promise((resolve, reject) => { const x = myHeavyFunc(); resolve(x); }).then(x => { this.setState({calculating: false}); // second setState }); }); } render() { const y = this.state.calculating? <p>calculating...</p> : ''; return ( <div> {y} <button onClick={this.handleXX}>start calc</button> </div> ); } }
about 4 years ago · Juan Pablo Isaza
2 Respostas
Responde à pergunta

0

Después de terminar su cálculo, debe volver a establecer la variable de estado "calculando" en "falso" en lugar de "verdadero":

 handleXX() { this.setState({calculating: true}, () => { // first setState new Promise((resolve, reject) => { const x = myHeavyFunc(); resolve(x); }).then(x => { this.setState({calculating: false}); // second setState }); }); }
about 4 years ago · Juan Pablo Isaza Relatório

0

Esto se debe a que js es un solo hilo.

Solo en tal caso, puede usar setTimeout para dar un tiempo para actualizar la interfaz de usuario para mostrar "calculando..." y luego llamar a myHeavyFunc.

Una solución más general es usar startTrantision, que está disponible en React 18.

Webworker también puede resolver esto.

about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda