React-pdf: reagiere ref={} ruft dreimal an, benutzerdefinierte Rückrufe sind nicht hilfreich genug

Erstellt am 23. Jan. 2018  ·  4Kommentare  ·  Quelle: wojtekmaj/react-pdf

Hi,

Vielleicht verstehe ich etwas falsch, aber aus irgendeinem Grund, wenn ich ref so verwende

<Document
  file={file}
  onLoadSuccess={this.onDocumentLoadSuccess}
  ref={node => console.log(node)}
>
....

Ich sehe dreimal folgende Ausgabe:

screenshot 2018-01-23 17 13 23

Nun, ich möchte ref , um zu erkennen, wo es auf der Seite gerendert wurde (offsetTop, offsetLeft usw.) und es gibt keine andere Möglichkeit, es zu erhalten, außer mit ref ist es ok, dass es dreimal aufgerufen wird?

In meinem echten Beispiel lade ich die Datei von der Clientseite, aber ich habe immer noch das gleiche Problem:(

PS Der Code stammt aus dem Ordner sample Ihres Repositorys

enhancement question

Alle 4 Kommentare

Hey @nnnikolay ,
Ja, dies ist ein völlig normales Verhalten jeder Komponente (wohlgemerkt - Komponente, nicht Element) React-Updates.

Außerdem ist es eine sehr schlechte Idee zu überprüfen, ob die Seite mit der Referenz der Document Komponente gerendert wurde.

Die einzige Methode, die ich empfehlen kann, ist der onRenderSuccess Prop-Callback, der in der Page Komponente platziert wird, auf die Sie auf ein erfolgreiches Rendern achten möchten.

Sie können dies auch tun, indem Sie inputRef prop an die Page Komponente anhängen, wodurch Ihre ref Funktion an das von der Page Komponente gerenderte Root-div-Element übergeben wird. Von dieser Methode wird jedoch abgeraten, da ab 3.0.0 ein Page Root-Div früher als zuvor angezeigt wird, um ein einfacheres Styling zu ermöglichen, während sich die Seite im Lade-/Rendering-Zustand befindet.

Danke @wojtekmaj für die Antwort und die Ideen, vor allem, wie ich sehe, braucht onRenderSuccess kein Argument, daher ist nicht klar, wie ich in diesem Rückruf die Position des DOM-Knotens Page herausfinden kann Seite, ich würde mich freuen, Ihren Rat dazu zu hören.

Trotzdem ist inputRef für mich in Ordnung, weil ich nur wissen muss, wo das <div> gerendert wird (obere und linke Koordinaten) auf der Seite.

Ah richtig. onRenderSuccess sollte eigentlich mehr Informationen darüber geben, was es rendert.

Derzeit können Sie eine Problemumgehung durchführen (Code aus Gründen der Lesbarkeit vereinfacht):

const pageNumber = 1;

return (
  <Document>
    <Page
      pageNumber={pageNumber}
      onRenderSuccess={() => doSomething(pageNumber)}
    />
  </Document>
);

aber da stimme ich voll und ganz zu. Verbesserungen an Callback-Funktionen landen auf meiner Liste für 3.0! :)

Verbesserungen wurden gerade zusammengeführt und werden erstmals in der kommenden v3.0.0-alpha.3 verfügbar sein.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen