Проблема findIndex с Immer и Redux Starter Kit - PullRequest
0 голосов
/ 28 июня 2019

У меня есть состояние избыточности, которое мне нужно обновить, оно выглядит так:

[
    {
        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.log(state);
        console.log(action);
        const index = state.findIndex(week => week.date === action.payload.date);
        console.log(index);

    }

Проблема в том, что я использую Redux Starter Kit, и он использует Immer внутри редукторов.Если я запускаю мой редуктор, это результат журналов консоли.

console.log results

Невозможно найти правильную неделю.Любые советы или указатели будут оценены.Я не совсем понимаю Immer или объекты Proxy, которые он использует.

Редактировать: @markerikson решил проблему.Я изменил это:

const index = state.findIndex(week => week.date === action.payload.date);

на это:

const index = state.findIndex(week =>moment(week.date).isSame(action.payload.date));

И теперь он находит правильный индекс.Solution results

1 Ответ

1 голос
/ 30 июня 2019

Экземпляры moment не будут равны === друг другу. Вам, вероятно, нужно использовать API Moment для их сравнения, например:

const index = state.findIndex(week => week.date.isSame(action.payload.date));

Обратите внимание, что эта часть не имеет ничего общего с Immer или Redux Starter Kit, а именно - разные экземпляры объектов будут иметь разные ссылки.

...