Я использую избыточность для перемещения поискового фильтра через приложение к компонентам.
У меня есть компонент, в котором я устанавливаю фильтры и функцию диспетчеризации вызовов, используя
this.props.dispatch(setFilter(newFilter));
Я использую ползунки / компоненты диапазонадля установки значений эти компоненты имеют метод handleAfterChange
, который настроен для вызова упомянутой функции диспетчеризации.Это работает нормально.
У меня также есть фильтры, которые настраиваются нажатием кнопок, я создал обработчик onClick
, и этот обработчик вызывает упомянутую функцию.Я проверил то, что посылаю параметру setFilter
functions (newFilter), и это то, что я хочу настроить.
Мое заданное действие определено:
export const setFilter = (filter = {}) => {
return {
type: SET_FILTER,
filter
};
};
Мой редуктор:
const searchFilter = (prevState = INITIAL_STATE.filter, action) => {
switch (action.type) {
case SET_FILTER: {
// prevState is already the state
// I want to set up in this reducer
console.log(prevState);
return Object.assign({}, prevState, action.filter);
}
case RESET_FILTER: {
return INITIAL_STATE.filter;
}
default: {
return prevState;
}
}
};
Проблема в том, что prevState уже является объектом, который я хочу установить в редукторе.Я проверяю (в другом компоненте), был ли изменен фильтр, и поэтому я получаю одинаковые prevProps и nextProps, поэтому никакие действия не будут инициированы.
Так что каким-то образом отправленные изменения уже находятся в редукторе как prevProps.