Я хочу попробовать не распространять «рассылку», если состояние совпадает с предыдущим. Проблема в том, что мое 'state' всегда содержит значение по умолчанию.
const initialState = {
pending: false,
fetched: false,
data: {
playAndPayAllowed: false,
sections: {},
allowedSectionsCount: 0
}
}
function isPreviousStateEqualToNew(oldState, newState) {
return JSON.stringify(oldState) === JSON.stringify(newState);
}
export default function shopConfig(state = initialState, action) {
switch (action.type) {
case SHOP_CONFIG_PENDING:
return {
...state,
pending: true,
data: {
playAndPayAllowed: false,
sections: {},
allowedSectionsCount: 0
},
error: false
}
case SHOP_CONFIG_SUCCESS:
if (isPreviousStateEqualToNew(state.data, action.payload)) {
return;
}
const playAndPayAllowed = action.payload.playAndPayAllowed;
const sections = action.payload.sections || [];
const allowedSectionsCount = Object.values(sections).filter(item => item);
return {
...state,
pending: false,
data: {
playAndPayAllowed,
sections: sections,
allowedSectionsCount: allowedSectionsCount.length
},
error: false
}
default:
return state;
}
}
Ожидалось, что старое состояние будет отображаться в переменной «состояние», но «состояние» всегда равно «initialState».