我有一个需要更新的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,这是控制台日志的结果。
找不到正确的星期。 任何提示或指示,将不胜感激。我不太了解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));
答案 0 :(得分:1)
moment
实例将不会彼此===
相等。您可能需要使用Moment的API进行比较,例如:
const index = state.findIndex(week => week.date.isSame(action.payload.date));
请注意,这部分与Immer或Redux入门套件没有任何关系-不同的对象实例将具有不同的引用。