我想做一個測驗應用程式。
在用戶按下提交按鈕后,將檢查問題。
因此,問題將在最后一次全部檢查。
我需要保存用戶對每個問題的選擇(答案),然后在提交時檢查它們。
我在考慮這個問題: 我對問題中每個可能的答案的復選框: 但是我得到 點擊答案時 什么是setUserAnswers()相當于userAnswers[currentQuestionIndex][key] = value?
為什么我得到了未定義的錯誤? 怎么做?
如何做到這一點,請幫助我的頭很痛。 uj5u.com熱心網友回復: 首先, uj5u.com熱心網友回復: 你正試圖訪問陣列中一個不存在的索引。
你試圖做的是將 對于
標籤:let [currentQuestionIndex, setCurrentQuestionIndex] = useState(0);
let [userAnswers, setUserAnswers] = useState([] as any) 。
function answerClick(value: any, key: any) {
// console.log('answer clicked');
userAnswers[currentQuestionIndex][key] = value;
// TypeError: undefined is not an object (evaluation 'userAnswers[currentQuestionIndex][key] = value')/span>
}
<BouncyCheckbox
key={index}
onPress={(value) => {
answerClick(value, index)。
}}
text={answer.title}。
/>
TypeError。undefined不是一個物件(評估'userAnswers[current][key] = value')
userAnswers應該有你想改變的所有東西的鍵和值。你得到未定義的原因是你試圖以userAnswers陣列中的一個物件為目標,但卻找不到。此外,你正在直接修改userAnswers狀態,這真的是錯誤的。這就是setUserAnswers的作用。你可以這樣做。function answerClick(value: any, key: any) {
// console.log('answer clicked');
setUserAnswers([ ...
...userAnswers,
{[key]: [value]}
]);
}
userAnsqers = [] 。
currentQuestionIndex = 0;
//userAnswers[currentQuestionIndex] === undefined。
{}懶洋洋地添加到陣列中(僅在需要時)。這將會起作用:function answerClick(value: any, key: any){
setUserAnswers(latest => {
const out = [...latest];
while (out.length <= currentQuestionIndex) out.push({})。
out[currentQuestionIndex][key] = value;
return out;
})
}
userAnswers[currentQuestionIndex][key] = value(見)來說,沒有任何與setUserAnswers()相當的東西。你可以找到一些自定義的鉤子來管理陣列或建立你自己的鉤子。
