8

react-virtualized 的组件 InfiniteLoader需要作为属性 loadMoreRows 传递的函数具有类似{ startIndex: number, stopIndex: number }): Promise. 我在我的项目中使用了 redux,所以loadMoreRows像这样的 redux action creator:

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

之后,此操作使用 react-redux 的连接函数连接到包含 InfiniteLoader 的反应组件。

所以我不确定,我怎样才能满足签名要求,因为 redux 动作创建者不返回任何值/

4

1 回答 1

2

eyeinthebrick是正确的。Promise 不是必需的返回值。

当你“连接”一个 Redux action-creator 时,调用它(调度它)实际上会返回一个 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 承诺。

于 2016-08-04T15:14:24.070 回答