【发布时间】:2020-04-16 08:33:14
【问题描述】:
我无法完全理解redux 的样板。我查找了immutable modifying of state 的常见模式,但问题是,所有这些模式都只是推到最后,而不是针对特定索引。
在我进入实际代码之前,为了更好地想象,这是状态结构的样子(伪代码):
state = {
quizMenu: {...},
quizEditor: Array<Question>,
> type Question = {
id: number,
question: string,
questionOptions: Array<QuestionOption>,
}
> type QuestionOption = {
id: number,
optionText: string,
isValid: boolean,
}
}
希望这是有道理的。我创建了一个添加问题的操作,效果很好。现在,我尝试创建一个操作以向现有问题添加选项,但我不知道如何在嵌套的对象数组中添加选项。
以下是我的相关操作的定义方式:
const AQO = 'ADD_QUESTION_OPTION';
/*
* @param questionId - ID of the question we're accesssing in quizEditor array
* @param id - id of the option we're adding (handled in component)
*/
const actionAddQuestionOption = createAction(
AQO,
(questionId: number, id: number) => ({
payload: {
id,
optionText: 'New option',
isValid: false,
questionId,
},
})
);
现在我的reducer是这样的:
const reducer = createReducer({//...}, {
[actionAddQuestionOption.type]: (state, action) => ({
...state,
quizEditor: [...state.quizEditor][action.payload.questionId].questionOptions.push({
id: action.payload.id,
optionText: action.payload.optionText,
isValid: action.payload.isValid,
})
})
}
这只是以这个怪物类型错误结束:https://pastebin.com/raw/pBbnxcQp
但我很确定我错误地访问了对象数组中的数组。
quizEditor: [...state.quizEditor][action.payload.questionId].questionOptions
有谁知道访问它的正确方法是什么?非常感谢!
【问题讨论】:
标签: redux reactjs typescript redux react-redux state