react redux的操作如何访问dispatch和getState?

时间:2016-08-24 23:01:13

标签: javascript reactjs import redux react-redux

react redux docs的reddit示例中,即使从未导入过actions.js,它们如何访问dispatch和getState函数?我以为你必须在你使用的每个文件中导入每个方法。

2 个答案:

答案 0 :(得分:1)

代码使用thunk middleware,请阅读async actions部分以了解详情。

答案 1 :(得分:1)

它无法访问外部库中的函数。

fetchPostsIfNeeded中,这些是本地定义的函数参数。只要重命名调用参数的其余代码,就可以将它们重命名为任意内容。例如

export function fetchPostsIfNeeded(subreddit) {
  return (fireAction, findState) => {
    if (shouldFetchPosts(findState(), subreddit)) {
      return fireAction(fetchPosts(subreddit))
    }
  }
} 

一样有效
export function fetchPostsIfNeeded(subreddit) {
  return (dispatch, getState) => {
    if (shouldFetchPosts(getState(), subreddit)) {
      return dispatch(fetchPosts(subreddit))
    }
  }
}

但是,命名对于文档来说是用户友好的,因为fetchPostsIfNeeded期望能够通过redux管道调度内部动作创建者fetchPosts()

在这种情况下,真实商店的调度功能很可能是通过道具进行依赖注入,您可以考虑将其传递给匿名函数,作为参数,在动作创建者中继续使用该模式本身。

有很多关于良好模式的可靠视频,可让商店通过Dan Abramov free courses on egghead.io上的应用程序。