我在使用redux-thunk时经常看到代码,内部函数返回某些内容,例如the official Redux async example:
const fetchPosts = subreddit => dispatch => {
dispatch(requestPosts(subreddit))
return fetch(`https://www.reddit.com/r/${subreddit}.json`)
.then(response => response.json())
.then(json => dispatch(receivePosts(subreddit, json)))
}
const shouldFetchPosts = (state, subreddit) => {
// return true or false
}
export const fetchPostsIfNeeded = subreddit => (dispatch, getState) => {
if (shouldFetchPosts(getState(), subreddit)) {
return dispatch(fetchPosts(subreddit))
}
}
所以fetchPostsIfNeeded()
是重击,fetchPosts()
也是如此。它们都返回一个函数,并且函数也返回某些东西。现在,该功能实际上是由中间件调用的,我不认为会使用返回的值。那么,为什么thunk内部的内部函数会继续返回某些东西,而不仅仅是调用它?该代码可能是:
const fetchPosts = subreddit => dispatch => {
dispatch(requestPosts(subreddit))
fetch(`https://www.reddit.com/r/${subreddit}.json`)
.then(response => response.json())
.then(json => dispatch(receivePosts(subreddit, json)))
}
const shouldFetchPosts = (state, subreddit) => {
// return true or false
}
export const fetchPostsIfNeeded = subreddit => (dispatch, getState) => {
if (shouldFetchPosts(getState(), subreddit)) {
dispatch(fetchPosts(subreddit))
}
}
then
链中添加回调,并在例如获取subredit帖子时执行某些操作。export const fetchPostsIfNeeded = subreddit => (dispatch, getState) => {
if (shouldFetchPosts(getState(), subreddit)) {
dispatch(fetchPosts(subreddit)).then(() => doSomething());
}
}