几个小时以来我一直在努力解决这个问题。
我正在尝试删除对象中数组的嵌套元素。它必须在 reducer 中一成不变地完成,这使得它变得棘手。
这里是对象:
questions {
0:
answers: [{…}]
createdAt: "2021-04-28T01:37:21.017Z"
creator: "607f6ab0ee09c"
likes: []
name: "Firstname Lastname"
}
我只想删除 answers 数组的 1 个元素。问题是我不知道(问题的)确切元素,直到我通过“创建者”代码搜索,然后我可以通过键 # 删除答案元素。
我尝试使用地图和过滤器,但在 3 层深的情况下,该逻辑从未奏效。我也愿意使用 Immutable-js。
非常感谢,对于看似简单的事情来说,这是一个令人困惑的问题。
编辑: 我意识到我可以在动作创建器中确定顶级问题对象的键并将其发送到减速器。 所以我需要知道如何做的就是删除嵌套在另一个对象中的对象中的数组元素。
感谢您的帮助!
答案 0 :(得分:1)
首先使用 questions
ES6 运算符克隆 ...
对象
const clonedQuestion = {...questions}
现在从答案数组中删除元素
const indexOfElementToRemove = clonedQuestion.answers.findIndex(element => element.creator === clonedQuestion.creator);
if(indexOfElementToRemove >= 0) {
clonedQuestion.answers.splice(indexOfElementToRemove, 1)
}
答案 1 :(得分:1)
您还可以查看官方的 redux 工具包,它允许您在他们的 createReducer
- 或 createSlice
- 创建的减速器中使用这样的变异逻辑:
delete state.questions.answers[5]
请参阅此教程页面,该页面简要概述了我们认为的“现代 Redux”:https://redux.js.org/tutorials/fundamentals/part-8-modern-redux
如果这不是您现在想要做的事情(但请记住,现代 redux 和旧版 redux 可以在应用程序中混合使用),请查看 immer
而不是 immutable
,因为 { {1}} 在这一点上基本上已经死了,而 immutable
的开发者体验要好得多。