Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs redux reducer中isFetching的多个实例_Reactjs_Redux - Fatal编程技术网

Reactjs redux reducer中isFetching的多个实例

Reactjs redux reducer中isFetching的多个实例,reactjs,redux,Reactjs,Redux,我有一个可通过state.posts.x 看起来是这样的: export default function (state = {}, action) { switch(action.type){ case FETCH_PUBLISHED_POSTS_REQUEST: return { ...state, isFetching: true } case FETCH_PUBLISHED_POSTS_SUC

我有一个可通过
state.posts.x

看起来是这样的:

export default function (state = {}, action) {
switch(action.type){
    case FETCH_PUBLISHED_POSTS_REQUEST:
        return {
            ...state,
            isFetching: true
        }
    case FETCH_PUBLISHED_POSTS_SUCCESS:
        return {
            ...state,
            publishedPosts: action.publishedPosts,
            isFetching: false
        }
    case FETCH_SINGLE_POST_REQUEST:
        return {
            ...state,
            isFetching: true
        }
    case FETCH_SINGLE_POST_SUCCESS:
        return {
            ...state,
            singlePost: action.singlePost,
            isFetching: false
        }
    default:
        return state;
    }
}
在我的组件中,我将状态映射到道具以检查isFetching。我遇到的问题是,每当调用publishedPosts或singlePost时,isFetching都会变为“true”,因此我的UI显示的是加载状态,而它不应该显示


解决这个问题的最佳实践方法是什么?把它分成两个减速器是没有意义的。更改isFetching的名称使其唯一(即isFetchingPublishedPosts)似乎也会适得其反。

您的组件应该只接收它所关注的部分状态。如果
isFetching
不应影响组件,则将其从组件的
MapStateTrops
功能中删除:

const mapStateToProps = state => ({ myprop: state.importantStateForTheComponent })

在本例中,如果在状态中有组件的
重要状态字段,则组件将作为道具接收,但它将忽略对
状态的任何更改。isFetching

我的减速器将导出为“posts”当使用mapStateToProps调用时,isFetching是这样引入的:isFetching:state.posts.isFetching我可以通过使reducer中的每个字段唯一来解决这个问题,即从isFetching更改为isFetching PublishedPosts。。。但这似乎很费劲,这取决于你使用国旗的目的。在这种情况下,您可能希望为不同类型的请求使用不同的标志,正如您所建议的那样。@MattSaunders这很费劲,但这是保持设计整洁的唯一方法。从这个意义上讲,Redux是冗长的,但是作为一种折衷,您可以获得组件的简单性。另一种方法是在
{published:{…},single:{…}
中拆分状态。获取任何一种类型的帖子也可能会导致不同的错误,例如您可能希望显示的错误。
无论何时发布帖子或singlePost都有两个操作