react redux中动作函数的目的是什么?它们是否都返回一个动作或函数,然后转到存储/中间件



在react redux reddit应用程序的例子中应该#shouldFetchPosts是动作的一部分吗?看起来很奇怪的是,它更像是一个helper而不是一个实际的操作,它应该返回一个分派给store的对象。我理解,动作可以包括用于发送异步相关的东西到中间件的函数,但#shouldFetchPosts似乎不适合这个目的,也不适合一个传统的动作。有没有更好的方法来组织这个活动?难道它一开始就不应该被抽象出来吗?

function fetchPosts(reddit) {
  return dispatch => {
    dispatch(requestPosts(reddit))
    return fetch(`https://www.reddit.com/r/${reddit}.json`)
      .then(response => response.json())
      .then(json => dispatch(receivePosts(reddit, json)))
  }
}
function shouldFetchPosts(state, reddit) {
  const posts = state.postsByReddit[reddit]
  if (!posts) {
    return true
  }
  if (posts.isFetching) {
    return false
  }
  return posts.didInvalidate
}
export function fetchPostsIfNeeded(reddit) {
  return (dispatch, getState) => {
    if (shouldFetchPosts(getState(), reddit)) {
      return dispatch(fetchPosts(reddit))
    }
  }
}

接得好。是的,你是对的!shouldFetchPosts不是一个动作。它是辅助函数。它一开始就不应该与动作创造者放在一起。有人可能会认为redux示例有很大的改进空间。但好的一面是,这也是学习东西的好方法。你发现了他们代码中的一个错误。您应该在示例项目中继续更正它。

最新更新