2016-08-04 2 views
3

Компонент InfiniteLoader от react-virtualised требует функции, переданной как свойство loadMoreRows иметь подпись, такую ​​как { startIndex: number, stopIndex: number }): Promise. Я использую Redux в моем проекте, так loadMoreRows является перевождь действие автором так:InfiniteLoader and 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) 
    ) 
    } 
    } 
} 

после того, это действие связано реагировать компонент, содержащий InfiniteLoader, используя функцию из среагировать-Redux подключения.

Так что я не уверен, как я могу удовлетворить требование подписи, так как создатели Redux действия не возвращают значение/

+0

Как я понял из исходного кода виртуализованного взаимодействия, не требуется возвращать Promise из функции loadMoreRows. хотя, если вы этого не сделаете, вы обязаны вызвать child.forceUpdate() для обновления основных компонентов. – eyeinthebrick

ответ

2

eyeinthebrick правильно. A Promise не является обязательным значение возврата.

Когда вы «подключаете» создателя действия Redux, вызов его (отправка его) фактически возвращает Promise. Так, например, я думаю, что вы могли бы сделать что-то больше, как это ...

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) 
    } 
    } 
} 

В этот момент InfiniteLoader только может ждать возвращаемый Redux обещание.

+0

не может проверить прямо сейчас, так как я пока не использую es7. мое текущее решение обновляется вручную сочувствием загруженных элементов в ComponentWillRecieveProps. поэтому, если есть новые загруженные элементы, я вызываю '' 'virtualScroll.recomputeRowHeights()' '. – eyeinthebrick

+0

Вам не нужен ES7. Вы можете заменить async/await обычным цепочкой Promise, и он все равно должен работать. :) – brianvaughn

+0

Брайан, я думаю, вы предполагаете наличие и использование какого-то промежуточного программного обеспечения, возможно, сокращающего; из коробки, отправка AFAICT просто возвращает действие. –

Смежные вопросы