У меня есть состояние редукции, которое мне нужно обновить, оно выглядит так:
[
{
date: moment("2019-06-15").toObject(),
attendance: [
{
name: "Ruben Hensen",
membershipNumber: "2084700",
attending: true,
present: false
},
{
name: "Peter Petersen",
membershipNumber: "2084701",
attending: true,
present: false
},
{
name: "Karel Kootjes",
membershipNumber: "2084702",
attending: true,
present: false
},
{
name: "Niedaar Mennekes",
membershipNumber: "2084703",
attending: true,
present: false
},
]
},
...
...
...
]
Мой редуктор пытается найти правильную неделю, чтобы обновить ее позже, но не может найти правильную неделю в массиве.
TOGGLE_PRESENCE: (state, action) => {
console.info(state);
console.info(action);
const index = state.findIndex(week => week.date === action.payload.date);
console.info(index);
}
Проблема в том, что я использую Redux Starter Kit, а он использует Immer внутри редукторов. Если я запускаю свой редуктор, это результат журналов консоли.
Не удается найти правильную неделю. Любые советы или указатели будут оценены. Я не совсем понимаю Immer или прокси-объекты, которые он использует.
Редактировать: @markerikson решил проблему. Я изменил это:
const index = state.findIndex(week => week.date === action.payload.date);
к этому:
const index = state.findIndex(week =>moment(week.date).isSame(action.payload.date));
Я попробую, но дата, с которой сравнивается, тоже из штата. Таким образом, они оба должны быть объектами даты. Я отчитаюсь, как только опробую.
== сравнение объекта не сравнивает ключи объектов. Он сравнивает расположение объектов в памяти. ака {'a': 'b'} == {'a': 'b'} неверно.





Экземпляры moment не будут === равными друг другу. Вероятно, вам нужно использовать API-интерфейсы Moment для их сравнения, например:
const index = state.findIndex(week => week.date.isSame(action.payload.date));
Обратите внимание, что эта часть не имеет ничего общего конкретно с Immer или Redux Starter Kit — разные экземпляры объектов будут иметь разные ссылки.
вы пытаетесь сравнить даты?
toObjectбудет объектом, а не датой, которую можно сравнить, верно? так как вы обращаетесь кaction.payload.date, который является объектом, потому что именно так называется ключ дляmoment.toObject. Так не будет лиaction.payload.date.date?