2016-08-04 24 views
3

Komponente InfiniteLoader von react-virtualised erfordert Funktion übergeben als Eigenschaft loadMoreRows, um Signatur wie { startIndex: number, stopIndex: number }): Promise zu haben. Ich redux in meinem Projekt verwenden, so ist loadMoreRows ein Redux Aktion Schöpfer wie folgt aus:InfiniteLoader und react-redux

const fetchEntities(start, stop) { 
    return fetch(`${myUrl}&start=${start}?stop=${stop}`) 
} 
const loadMoreRows = ({ startIndex, stopIndex }) => { 
    return (dispatch, getState) => { 
    return function(dispatch) { 
     return fetchEntities(startIndex, stopIndex).then(
     items => dispatch(simpleAction(items)), 
     error => console.log(error) 
    ) 
    } 
    } 
} 

danach wird diese Aktion Komponente reagieren verbunden enthält InfiniteLoader Funktion von reagieren-redux Verbindung verwenden.

So bin ich nicht sicher, wie kann ich Unterschrift Anforderung zu erfüllen, als Redux Aktion Schöpfer keinen Wert zurückgeben/

+0

wie ich aus dem Quellcode von react-virtualisierte verstanden, ist es nicht erforderlich, Promise von loadMoreRows-Funktion zurückzugeben. Wenn Sie dies nicht tun, müssen Sie child.forceUpdate() aufrufen, um die zugrunde liegenden Komponenten zu aktualisieren. – eyeinthebrick

Antwort

2

eyeinthebrick korrekt ist. Ein Versprechen ist kein erforderlicher Rückgabewert.

Wenn Sie einen Redux-Action-Creator "verbinden", wird durch das Aufrufen (Senden) des Redux-Action-Creators tatsächlich eine Promise zurückgegeben. So zum Beispiel, ich glaube, Sie etwas mehr wie dies tun könnten ...

function fetchEntities (start, stop) { 
    return fetch(`${myUrl}&start=${start}?stop=${stop}`) 
} 

const loadMoreRows = ({ startIndex, stopIndex }) => { 
    return async (dispatch, getState) => { 
    try { 
     const items = await fetchEntities(startIndex, stopIndex) 
     await dispatch(simpleAction(items)) 
    } catch (error) { 
     console.log(error) 
    } 
    } 
} 

An welchem ​​Punkt InfiniteLoader nur die zurück Redux Versprechen erwarten kann.

+0

kann ich gerade nicht überprüfen, da ich es7 noch nicht benutze. Meine aktuelle Lösung aktualisiert mit der Hand durch Mitgefühl heruntergeladener Elemente in ComponentWillRecieveProps. Wenn also neue heruntergeladene Elemente vorhanden sind, rufe ich '' 'virtualScroll.recomputeRowHeights()' '. – eyeinthebrick

+0

Sie benötigen ES7 nicht. Sie können die async/await mit der normalen Promise-Verkettung ersetzen und es sollte trotzdem funktionieren. :) – brianvaughn

+0

Brian, ich denke, du vermutest die Anwesenheit und Verwendung einiger Middleware, wahrscheinlich Redux-Thunk; Out-of-the-Box, AFAICT-Versand gibt nur die Aktion zurück. –

Verwandte Themen