在react redux reddit app example中#shouldFetchPosts应该是行动的一部分吗?看起来很奇怪它更像是一个帮助器而不是一个实际的动作,它应该返回一个被分派到商店的对象。我理解这些操作可以包含用于向中间件发送异步相关内容的函数,但#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))
}
}
}
答案 0 :(得分:1)
好抓。是的,你是对的! shouldFetchPosts
不是行动。它是一个辅助功能。它不应该放在动作创建者的首位。有人可能会认为redux示例有很大的改进空间。但在更光明的一面,它也是学习东西的好方法。你在他们的代码中发现了一个错误。您应该继续在示例项目中更正它。