我有一个减速器,通过它可以调度动作时重新调整适当的状态。现在,我会定期调用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
loading state reducer
GET_AUDIT_DATA
也只是以auditData正确的方式返回当前获得的数据,否则我应该做不同的事情。基本上我想overwrite的current data与new one。
overwrite
current data
new one
最好的处理方法是将一个信息发送给 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 });