我有一个带有无线电输入的表格。每次用户选择on选项时,如果与用户回答的问题相同,我必须更新包含问题答案的数组以覆盖旧的答案。所以我有这个useState
在我看来,这将映射答案的旧值,映射问题的答案是否已经存在,然后Object.assign()
映射,否则,如果它是新问题的新答案,则只需返回答案即可。但是它仅返回默认数组。如果像[{}]一样初始化,它将返回Array[{}]
。如果为[],则返回Array[]
状态是
const [answers, setAnswers] = setState([])
const handleCheckbox = (e, question) => {
const newAnswer = { choice: e.target.id, question: question.uuid };
setAnswers(
[...answers],
answers.map(
answer =>
answer.question === newAnswer.question ?
Object.assign(answer, newAnswer):
newAnswer
)
);
};
预期:
answers: [{id: 1}, {id: 2},...]
,而不重复那些已经存在的内容。实际:
Array[]
最佳答案
不确定要执行的操作,您正在调用带有2个参数的更新程序setAnswers
,而只需一个参数。您预期的结果[answerQuestion1: {}, answerQuestion2:{},...]
不是有效的JSON格式,并且您使用了setState
而不是useState
。
我认为您应该重组模型,为什么不对状态变量answers
使用对象,就像这样:
const [answers, setAnswers] = useState({});
const handleCheckbox = (e, question) => {
const id = question.uuid;
const value = e.target.id; // Maybe you could use e.target.value or e.target.name
setAnswers(prevAnswers => ({
...prevAnswers,
[id]: value
}));
};
关于javascript - 使用React Hooks更新状态数组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58672404/