Redux documentation表示要进行异步调用 - 这通常涉及指示异步调用开始的操作,以及稍后指示其完成的操作 - 我应该使用“thunk”中间件。这允许我写这样的“动作创作者”:
function fetchPosts(reddit) {
return dispatch => {
dispatch(requestPosts(reddit))
return fetch(`http://www.reddit.com/r/${reddit}.json`)
.then(response => response.json())
.then(json => dispatch(receivePosts(reddit, json)))
}
}
(此处requestPosts
和receivePosts
是动作创建者。)
thunk
中间件允许我发送fetchPosts
的(函数)输出,例如
store.dispatch(fetchPosts('reactjs')).then(() =>
...
但为什么要涉及中间件呢?为什么这比使用全局存储编写自己的fetchPost
函数更好,如下所示:
function fetchPosts(reddit) {
store.dispatch(requestPosts(reddit));
return fetch(`http://www.reddit.com/r/${reddit}.json`)
.then(response => response.json())
.then(json => store.dispatch(receivePosts(reddit, json)))
}
}
显然,我不能dispatch
这个功能,但这似乎并不十分重要。我错过了什么?