【发布时间】:2019-11-26 17:55:33
【问题描述】:
我是 js 新手,并且用 redux 对 js 做出反应我正在尝试不可变地更新全局状态的值这是我当前的状态
const initialState = {
questions: [
{
id: 1010,
name: "Inside which HTML element do we put the JavaScript?",
questionTypeId: 1,
options: [
{
id: 10,
name: "javascript",
isAnswer: false,
isSelected: false
},
{
id: 11,
name: "scripting",
isAnswer: false,
isSelected: false
},
{
id: 12,
name: "script",
isAnswer: true,
isSelected: false
},
{
id: 13,
name: "js",
isAnswer: false,
isSelected: false
}
]
},
{
id: 1011,
name: "Javascript is a langague used for ?",
questionTypeId: 2,
options: [
{
id: 14,
name: "ConsoleApp",
isAnswer: false,
isSelected: false
},
{
id: 15,
name: "ShellApp",
isAnswer: false,
isSelected: false
},
{
id: 16,
name: "WebApp",
isAnswer: true,
isSelected: false
},
{
id: 17,
name: "MobileApp",
isAnswer: false,
isSelected: false
}
]
},
{
id: 1012,
name: "What is the full form of SPA?",
questionTypeId: 3,
options: [
{
id: 18,
name: "Secured and Progressive App",
isAnswer: false,
isSelected: false
},
{
id: 19,
name: "Single Page Application",
isAnswer: false,
isSelected: false
},
{
id: 20,
name: "SOLID Principles for Application",
isAnswer: true,
isSelected: false
},
{
id: 21,
name: "None of the above",
isAnswer: false,
isSelected: false
}
]
}
],
Currentquestion: []
};
我想将问题数组的 isSelected 值更改为 true,该数组的索引具有 questionTypeId:1,后跟索引的选项数组:0 下面是我试图改变状态的reducer,UI中的action.payload值为1,ui中的action.value的值为0
case SELECT_ANS: {
const question = action.payload;
const index = action.value;
// const newstate = produce(state, draftsate => {
// draftsate.questions[question].options[index].isSelected = true;
// });
return {
...state,questions:[
{
...state.questions[question],options:[{
...state.questions[question].options[index],isSelected:true
}]
}
]
]
]
};
如果有任何遗漏或不当之处我很抱歉,我会尽可能多地提供所有信息,任何解释方面的帮助都会非常感谢,在此先感谢
【问题讨论】:
-
您似乎忘记将
...state.questions添加到新的state.questions数组中?尝试逐步构建新状态,从最内层开始向上移动。另外,想修复凌乱的缩进,发现括号不匹配。 -
@ChrisG,对不起,我是新手,你能帮我写代码吗?
-
...state,questions中有一个错字 - 不是逗号,而是点。 -
@muka.gergely 不,
questions是这里的关键,而不是参考
标签: javascript reactjs redux react-redux immutability