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 没有任何关系 - 不同的对象实例将有不同的引用。
我有一个 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 没有任何关系 - 不同的对象实例将有不同的引用。