Immer和Redux入门套件的findIndex问题

时间:2019-06-28 17:21:16

标签: reactjs redux react-redux immer.js

我有一个需要更新的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入门工具包,并且在减速器中使用Immer。如果运行我的reducer,这是控制台日志的结果。

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 个答案:

答案 0 :(得分:1)

moment实例将不会彼此===相等。您可能需要使用Moment的API进行比较,例如:

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

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