react redux 中动作函数的目的是什么?他们都应该 return 一个进入 store/middleware 的动作或功能吗?
What is the purpose of action functions in react redux? Should they all return an action or function that goes to the store/middleware?
在 react redux reddit app example 中,#shouldFetchPosts 是否应该成为操作的一部分?它更像是一个助手而不是一个实际的动作,这似乎很奇怪,它应该 return 一个被分派到商店的对象。我知道动作可以包括用于将异步相关内容发送到中间件的函数,但#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 示例有很大的改进空间。但从好的方面来说,这也是学习东西的好方法。你在他们的代码中发现了一个错误。您应该继续并在您的示例项目中更正它。
在 react redux reddit app example 中,#shouldFetchPosts 是否应该成为操作的一部分?它更像是一个助手而不是一个实际的动作,这似乎很奇怪,它应该 return 一个被分派到商店的对象。我知道动作可以包括用于将异步相关内容发送到中间件的函数,但#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 示例有很大的改进空间。但从好的方面来说,这也是学习东西的好方法。你在他们的代码中发现了一个错误。您应该继续并在您的示例项目中更正它。