Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

307
Views
La descarga del botón siempre apunta y descarga el primer svg de mi colección, cómo hacer que funcione para que apunte a cada svg específico

Intento crear una aplicación qrcode con react. Después de que el usuario envíe el formulario con valor para crear un svg, también puede descargarlo. Pero no puedo hacer que funcione, cada vez que descarga el mismo svg.

mi función de descarga

 const downloadQRCode = (e) => { e.preventDefault(); let svg = qrRef.current.querySelector("svg"); let svgXML = new XMLSerializer().serializeToString(svg); let dataUrl = "data:image/svg," + encodeURIComponent(svgXML); let anchor = document.createElement("a"); anchor.href = dataUrl; anchor.download = `qr-code.svg`; document.body.appendChild(anchor); anchor.click(); document.body.removeChild(anchor); };

Aquí uso el mapa para renderizar el componente qrcode y un botón para descargar el svg

 qrcode.map((item) => { return ( <li ref={qrRef}> <QRCode className="qrcode" size={item.size} value={item.value} bgColor={item.bgcolor} fgColor={item.fgcolor} level="L" renderAs="svg"> </QRCode> <form onSubmit={downloadQRCode}> <button type="submit">Download</button> </form> </li> ) }
about 4 years ago · Juan Pablo Isaza
2 answers
Answer question

0

Parece que está utilizando una sola referencia de React para todo el qrcode que está mapeando. Sugiero usar una matriz de referencias React y pasar esto al controlador onClick del botón.

 const qrcodeRefs = React.useRef([]); qrcodeRefs.current = qrcode.map((_, i) => qrcodeRefs.current[i] ?? createRef());

...

 const downloadQRCode = (qrRef) => e => { const svg = qrRef.current.querySelector("svg"); const svgXML = new XMLSerializer().serializeToString(svg); const dataUrl = "data:image/svg," + encodeURIComponent(svgXML); const anchor = document.createElement("a"); anchor.href = dataUrl; anchor.download = `qr-code.svg`; document.body.appendChild(anchor); anchor.click(); document.body.removeChild(anchor); };

...

 qrcode.map((item, index) => { return ( <li ref={qrcodeRefs.current[i]}> <QRCode className="qrcode" size={item.size} value={item.value} bgColor={item.bgcolor} fgColor={item.fgcolor} level="L" renderAs="svg" /> <button type="button" onClick={downloadQRCode(qrcodeRefs.current[i])}> Download </button> </li> ) }
about 4 years ago · Juan Pablo Isaza Report

0

si usa ref en un bucle, mantendrá el último valor. no necesita una ref , reemplace

 let svg = qrRef.current.querySelector("svg");

con

 // e.target.parentNode is the li dom let svg = e.target.parentNode.querySelector("svg");
about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!