小编典典

从另一个reducer内部访问reducer状态

reactjs

我有一个减速器,通过它可以调度动作时重新调整适当的状态。现在,我会定期调用API,因此结果将一次又一次触发操作。所以我想要的是,如果化简器状态已经有数据,那么在发送呼叫时另一个化简器不会将状态显示为正在加载。仅在第一次接收数据时,它必须保持其加载状态。我希望我能正确解释

这是我的代码片段

加载状态减少器

const loading = (state = false, action) => {

    switch (action.type) {
    case 'GET_AUDIT_DATA':         // here I want to return true only when there is no data available
        return true
    case 'GET_AUDIT_DATA_RECEIVED':  
        return false
    case 'GET_AUDIT_DATA_ERROR':
        return false
    default:
        return state
    }
}

组合减速器

const allReducers = combineReducers({
    auditData: AuditData,
    auditLoading: AuditLoading,
    modifiedOrders: ModifiedOrders
});

export default allReducers;

Reducer在超级代理触发的操作上返回数据

const auditData = (state = [], action) => {
    switch(action.type) {
        case 'GET_AUDIT_DATA_RECEIVED': 
        console.log(action.data);
            return action.data;
        case 'GET_AUDIT_DATA_ERROR': 
            return action.err;
        default :
            return state;
    }
}
export default auditData;

因此,最初,auditData它不包含任何数据,只有在第一次成功调用之后,它才返回数据。当同时调用此方法时,只有当审计数据缩减程序不包含任何数据时loading state reducer,它才应在GET_AUDIT_DATA操作中返回true 。

也只是以auditData正确的方式返回当前获得的数据,否则我应该做不同的事情。基本上我想overwritecurrent datanew one


阅读 414

收藏
2020-07-22

共1个答案

小编典典

最好的处理方法是将一个信息发送给 Loading状态化简器 ,以了解其他化简器是否已经有数据。结束时:

const loading = (state = false, action) => {

    switch (action.type) {
    case 'GET_AUDIT_DATA':
        if(!action.dataAlreadyInitialized){
            return true
        }
    case 'GET_AUDIT_DATA_RECEIVED':  
        return false
    case 'GET_AUDIT_DATA_ERROR':
        return false
    default:
        return state
    }
}

您应该可以从操作功能访问应用程序状态并执行以下操作:

dispatch({
  type:'GET_AUDIT_DATA',
  dataAlreadyInitialized: appState.auditData.length > 0
});
2020-07-22