Ich habe eine Komponente, die eine Sammlung von Elementen als Requisiten erhält und mapsie zu einer Sammlung von Komponenten zusammenfügt, die als untergeordnete Elemente einer übergeordneten Komponente gerendert werden. Wir verwenden Bilder, die WebSQLals Byte-Arrays gespeichert sind . Innerhalb der mapFunktion erhalte ich eine Bild-ID vom Element und rufe das asynchron an DAL, um das Byte-Array für das Bild zu erhalten. Mein Problem ist, dass ich das Versprechen nicht an React weitergeben kann, da es nicht für Versprechen beim Rendern ausgelegt war (soweit ich das sowieso nicht beurteilen kann). Ich komme aus einem C#Hintergrund, also suche ich awaitwahrscheinlich nach dem Schlüsselwort für die Neusynchronisierung von verzweigtem Code.
Die mapFunktion sieht ungefähr so aus (vereinfacht):
var items = this.props.items.map(function (item) {
var imageSrc = Utils.getImageUrlById(item.get('ImageId')); // <-- this contains an async call
return (
<MenuItem text={item.get('ItemTitle')}
imageUrl={imageSrc} />
);
});
und die getImageUrlByIdMethode sieht so aus:
getImageUrlById(imageId) {
return ImageStore.getImageById(imageId).then(function (imageObject) { //<-- getImageById returns a promise
var completeUrl = getLocalImageUrl(imageObject.StandardConImage);
return completeUrl;
});
}
Dies funktioniert nicht, aber ich weiß nicht, was ich ändern muss, damit dies funktioniert. Ich habe versucht, der Kette ein weiteres Versprechen hinzuzufügen, aber dann wird eine Fehlermeldung angezeigt, da meine Renderfunktion ein Versprechen anstelle von legalem JSX zurückgibt. Ich dachte, dass ich vielleicht eine der ReactLebenszyklusmethoden nutzen muss, um die Daten abzurufen, aber da ich die propsbereits dort haben muss, kann ich nicht herausfinden, wo ich das tun kann.
componentWillMountanstattcomponentDidMountkein anfängliches "leeres" Rendern zu haben.componentWillMountwird vor dem ersten Rendern ausgeführt.