Mi caso de uso es simple. Tengo un componente de reacción que toma algunos accesorios y genera algo. Ahora quiero descargarlo como una imagen sin renderizarlo, básicamente sin mostrárselo al usuario. html2canvas y react-component-export-image . En ambas bibliotecas, logré capturar la captura de pantalla, pero ambas requirieron que renderizara el componente.
Usé el código de esta página para react-component-export-image https://www.npmjs.com/package/react-component-export-image
Supongamos que el siguiente es mi componente
const Component1 = ({ reference }) => { return ( <div ref={reference} > <div className="share-cause-header"> Some header stuff </div> <div className="share-cause-body"> some body stuff </div> <div className="share-cause-footer"> some footer stuff </div> </div> ); }; Ahora, en otro Component2 , quiero enviar algunos accesorios a mi Component1 y luego descargar ese componente como una imagen sin mostrar nada al usuario. Un usuario solo debe ver el botón de descarga y la imagen descargada
const Component2 = () => { const shareButtonImageDownload = (e) => { e.stopPropagation(); console.log("Hi there"); }; return ( <div > <button onClick={shareButtonImageDownload } ></button> </div> ); };Si el componente no está visible, no puede tomar una captura de pantalla. Pero puede sacarlos de la vista visible, así:
https://codesandbox.io/embed/laughing-http-w3ndr?fontsize=14&hidenavigation=1&theme=dark
import { exportComponentAsJPEG, exportComponentAsPDF, exportComponentAsPNG } from "react-component-export-image"; import React, { useRef } from "react"; const ComponentToPrint = React.forwardRef((props, ref) => ( <div ref={ref} style={{ marginTop: "-50px" }}> <div className="share-cause-header">Some header stuff</div> <div className="share-cause-body">some body stuff</div> <div className="share-cause-footer">some footer stuff</div> </div> )); const MyComponent = () => { const componentRef = useRef(); return ( <React.Fragment> <ComponentToPrint ref={componentRef} /> <button onClick={() => exportComponentAsJPEG(componentRef)}> Export As JPEG </button> <button onClick={() => exportComponentAsPDF(componentRef)}> Export As PDF </button> <button onClick={() => exportComponentAsPNG(componentRef)}> Export As PNG </button> </React.Fragment> ); }; export default MyComponent;