2017-09-06 1 views
0

Ich habe eine React-Komponente zum Rendern von benutzerdefinierten Bildern. In einer vereinfachten Form, sieht es wie folgt aus:Erkennen, wenn ein reaktiviertes Bild geladen wird

function MyImage(props) { 
    return <img src={props.src} onLoad={props.onLoad} /> 
} 

Die Webseite ist server gemacht, indem ReactDOMServer und die <img> Elemente sind (absichtlich) bereits in der Anfangs HTML-Dokument. Ihre onLoad Event-Handler sind jedoch nicht. Ich glaube, das ist ein Feature von ReactDOMServer.

manchmal Was passieren kann, ist, dass einige der kundenspezifischen Bilder, vor allem die kleineren, Lade vor beenden JavaScript geladen wird oder bevor es beginnt zu laufen oder zumindest vor setzt die onLoad Event-Handler Reagieren auf. Daher verursachen die onLoad Ereignisse in diesen Bildern keine Ereignishandler, die aufgerufen werden.

Gibt es eine Möglichkeit, um sicherzustellen, dass die onLoad Event-Handler, die innerhalb von React-rendered <img> Elementen aufgebaut sind, werden immer aufgerufen werden, nachdem die zugrunde liegenden Bilder Laden beenden?

Meine wichtigsten Einschränkungen sind, dass ich die <img> Elemente enthalten muss, verwenden möchte mit ihre src Attributen richtig eingestellt Reagieren und die Server-gerenderte HTML-Seite.

Antwort

0

Sie können Ihre onLoad Handler auf die componentDidMount() Methode verschieben. Siehe docs

+0

Ich sehe nicht, was Sie genau meinen und wie es mit meinem speziellen Problem helfen kann. Bitte klären Sie. –

+0

Ich brauche immer noch den 'onLoad'-Event-Handler, der aufgerufen wird, wenn das Laden des Bildes beendet ist, so dass ich die Event-Handler nicht von den '' -Elementen" wegbewegen "kann. Willst du den Ereignishandler einfach manuell in 'componentDidMount' aufrufen (wenn' image.complete' wahr ist)? –

+1

Das DOM ist über die 'componentDidMount'-Phase zugänglich, was bedeutet, dass Ihr Bild vollständig geladen sein sollte. Also, ja, ich meine den Event-Handler manuell darin aufzurufen. – koolkat

Verwandte Themen