отдает одинаковый ответ. Есть такой селектор
const messageSelector = createSelector(
state => state.message,
message => {
if (!message) return;
return {
name: message.name,
state: message.state,
status: message.count < 100 ? 'OK' : message.count < 1000 ? 'Warning' : 'Error',
};
}
);
В итоге данные те же самые, но просходит перерендер. Что не так?
А проверку текущего состояния и новго нельзя сделать?
shouldComponentUpdate() Не подойдёт?
Стандартный реселект тебе тут не поможет, так как хоть содержимое ответа от сервера одинаковое, для js это все равно новый объект. В твоей ситуации у тебя есть несколько вариантов: 1) наслаждаешься жизнью, не парясь о таких мелочах 2) создаёшь в ответе от сервера поле, по которому ты проверяешь, что ответ не изменился и проверяешь на это поле перед диспатчем 3) делаешь deep equality сравнение полученных объектов каждый раз, когда приходит ответ от сервера (не делай так, пожалуйста)
так а что у тебя в message ?
отдельно мемоизируйте name, state, message. Так же можно саму функцию обращения к апи закрыть так что она будет хранить последнее строковое представление ответа и сравнивать с каждым новым: если что-то изменилось возвращаем новый жисон, нет - старый (старую ссылку)
Обсуждают сегодня