更新redux中特定密钥的值



我有一个处于redux状态/存储的数组,如[{"answer": "yes", "questionId": 2},{"answer": "yes", "questionId": 3}]

我只想根据id更新对象的答案,如果这是状态,用户发送{"answer": "no", "questionId": 2}。如何在redux中更新此状态?或者只删除questionId为2的对象并添加发送的一个用户?

return {
...state,
answers: [...state.answers[0].answer, payload.answer],
};

不起作用

return {
...state,
answers[0].answer: [...state.answers, payload.answer],
};

这是不允许的。。请记住,此数组只能存储2个对象。任务是用户发送2个答案,如果答案不在数组中,我必须将它们存储在答案的存储或数组中,如果答案在数组中则只更新特定的答案。

我也试过这个,但效果不如预期。

for (i = 0; i <= state.answers.length; i++) {
if (state.answers[i]?.questionId === payload.questionId) {
state.answers.splice(
state.answers.indexOf(payload),
1,
);

return {
...state,
answers: [...state.answers, payload.answer],
};
} else {
return {
...state,
answers: [...state.answers, payload],
};
}

您可以使用array.findIndex查找需要更新的目标对象的索引,然后用新的索引替换该索引处的对象。

//Make deep copy of state
let tempAnswers = JSON.parse(JSON.stringify(state.answers));
let targetAnswerIndex = tempAnswers.findIndex(answer => {
return answer.questionId === payload.answer.questionId
});
tempAnswers[targetAnswerIndex] = payload.answer;
state.answers = tempAnswers;

最新更新