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

345
Visualizações
Llame a un método en el componente secundario solo después de que el padre complete la nueva representación

Tengo un gráfico con una calidad gráfica inferior que se muestra en un componente principal <HeatMap /> . HeatMap tiene un componente secundario, <MyButton {...data}> . MyButton es básicamente un botón, que descarga la imagen del gráfico. Mi requisito es: después de hacer clic en el botón, el padre (Mapa de HeatMap ) debe volver a renderizarse en una imagen svg de alta calidad. Y solo después de eso, la descarga debería ocurrir.

Lo que he podido lograr: al hacer clic en el botón por primera vez, la calidad de la imagen cambia a un svg, pero se descarga la imagen png . Creo que la descarga comienza antes de que el padre esté completamente renderizado.

Código:

 class HeatMap extends Component { constructor (props) { super(props); this.state = { getSVG: false, loadedData: [], } } render () { const { getSVG, loadedData } = this.state; return ( <Fragment> {getSVG ? <HeatmapSeries colorType="literal" data={loadedData} /> // svg graph : <HeatmapSeriesCanvas colorType="literal" data={loadedData} />} // png(low-qlty) <MyButton {...this.props} svgFunction={(required) => this.setState({ getSVG: true})} getSVG={getSVG} /> </Fragment> ) } }
 class MyButton extends Component { render() { return ( <Button size="small" icon="download" onClick={this._downloadSVG} >SVG</Button> ) } /** * Generate the image and the download action * @return {void} **/ async _downloadSVG() { const { svgFunction } = this.props; if (typeof svgFunction === 'function') { svgFunction(); // re-render the graph as a vector (try to re-render parent first) } methodToDownloadGraph({...this.props}); // graph svg is passed as argument } }

El problema es: methodToDownloadGraph se completa antes, se completa la nueva representación de los padres. Aquí hay una imagen de lo que quiero lograr: ingrese la descripción de la imagen aquí

about 4 years ago · Juan Pablo Isaza
2 Respostas
Responde à pergunta

0

Prueba este

 async _downloadSVG() { const { svgFunction } = this.props; if (typeof svgFunction === 'function') { await svgFunction(); // Add this line as it is } methodToDownloadGraph({...this.props}); // graph svg is passed as argument }
about 4 years ago · Juan Pablo Isaza Relatório

0

setState de React es una función asíncrona, lo que significa que no actualizará el estado inmediatamente después de llamarlo. Si desea realizar alguna operación después de la actualización del estado, debe pasar la devolución de llamada como segundo argumento a la función setState .

Para resolver este problema, deberá llamar a la función methodToDownloadGraph en el componente HeatMap en lugar del componente Button .

Puedes hacer algo como esto:

 svgFunction={(required) => this.setState({ getSVG: true}, () => methodToDownloadGraph())}
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