Hola,
tal vez no entiendo algo, pero por alguna razón cuando uso ref
así
<Document
file={file}
onLoadSuccess={this.onDocumentLoadSuccess}
ref={node => console.log(node)}
>
....
Veo tres veces la siguiente salida:
Bueno, quiero usar ref
para detectar dónde se ha renderizado en la página (offsetTop, offsetLeft, etc.) y no hay otra forma de obtenerlo excepto usando ref
, así que mi pregunta es ¿Está bien que se invoque tres veces?
En mi ejemplo real, cargo el archivo desde el lado del cliente, pero aún así, tengo el mismo problema :(
PD: el código se toma de la carpeta sample
de su repositorio
Hola @nnnikolay ,
sí, este es un comportamiento completamente normal de cualquier componente (tenga en cuenta: componente, no elemento) React actualizaciones.
Además, es una muy mala idea comprobar si la página se ha renderizado utilizando la referencia del componente Document
.
El único método que puedo recomendar es la devolución de llamada onRenderSuccess
prop colocada en el componente Page
que desea escuchar para un renderizado exitoso.
También puede hacerlo adjuntando inputRef
prop al componente Page
, que pasará su función ref
al elemento div raíz representado por el componente Page
. Sin embargo, este método se desaconseja porque a partir de 3.0.0, un div Page
root aparecerá antes que antes para permitir un estilo más fácil mientras la página está en estado de carga / renderizado.
Gracias @wojtekmaj por responder y por ideas, en primer lugar, ya que veo que onRenderSuccess
no acepta ningún argumento, por lo que no está claro cómo en esta devolución de llamada puedo averiguar la posición del nodo Page
DOM en el página, me encantaría escuchar sus consejos al respecto.
Sin embargo, inputRef
está bien para mí, porque solo necesito saber dónde se representa <div>
(coordenadas superior e izquierda) en la página.
Ah bien. onRenderSuccess debería dar más información sobre lo que representa.
Actualmente, puede hacer una solución alternativa (código simplificado para facilitar la lectura):
const pageNumber = 1;
return (
<Document>
<Page
pageNumber={pageNumber}
onRenderSuccess={() => doSomething(pageNumber)}
/>
</Document>
);
pero estoy totalmente de acuerdo con eso. ¡Las mejoras en las funciones de devolución de llamada aterrizan en mi lista para 3.0! :)
Las mejoras recién se fusionaron y estarán disponibles por primera vez en la versión entrante v3.0.0-alpha.3.