Immer 和 Redux Starter Kit 的 findIndex 问题

findIndex problem with Immer and Redux Starter Kit

我有一个 redux 状态需要更新,它看起来像这样:

[
    {
        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
            },
        ]

    },
...
...
...
]

我的 reducer 试图找到正确的星期以便稍后更新它,但无法在数组中找到正确的星期。

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,它在 reducers 中使用了 Immer。如果我 运行 我的减速器这是控制台日志的结果。

找不到正确的周。 任何提示或指示将不胜感激。我不太了解 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));

现在它找到了正确的索引。

moment 个实例不会=== 彼此相等。您可能需要使用 Moment 的 API 来比较它们,例如:

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

请注意,这部分与 Immer 或 Redux Starter Kit 没有任何关系 - 不同的对象实例将有不同的引用。