如何在复选框更改事件中填充布尔值数组?
How to fill array of boolean values on checkbox change event?
我想做的是,用布尔值填充答案数组 values.My 复选框是动态填充的,但只有四个。如果未选中复选框,则其值应为 false,如果选中,则应为 true.Values 应对应于数组索引,我的意思是,如果第一个复选框被切换,则只有答案 [0] 应该更改,如果第二个复选框被更改,则答案[1] 等等..
沙盒https://codesandbox.io/s/elated-thompson-7rthy?file=/src/App.js
如果您也能帮我设置选中的值,我将不胜感激。
最后我将这个值设置为上下文存储,最后发送到服务器。
const Quiz1 = (props) => {
const [answers, setAnswers] = useState([false, false, false, false]);
const handleChange = (e) => {
setAnswers([...answers, e.target.checked]);
setQuizState({ id: 0, question_id: question.question_id, answer: [answers] });
};
return (
{question?.options?.map((option, i) => {
<Checkbox
id={i}
name={option}
checked={WHAT TO PUT HERE?}
onChange={(e) => handleChange(e)}
/>}
)
}
如果我没理解错的话,你可以直接使用地图函数的索引来使用正确答案索引。
checked={answer[i]}
设置setAnswers([...answers, e.target.checked])
会将新的新事件值附加到您的答案数组。相反,您应该覆盖答案值。
answer[i] = e.target.value
您可以对状态进行浅表复制并更改其值。这是您想要的东西的简单示例:
import { useEffect, useState } from "react";
const Quiz1 = (props) => {
const question = {
options: ["1", "2", "3", "4"]
};
const [answers, setAnswers] = useState([false, false, false, false]);
useEffect(() => {
console.log(answers);
}, [answers]);
const handleChange = (e, i) => {
let copy = [...answers];
let current = copy[i];
current = e.target.checked;
copy[i] = current;
setAnswers(copy);
};
return question?.options?.map((option, i) => {
return (
<>
<label>{option}</label>
<input
aria-label={option}
id={i}
name={option}
checked={answers[i]}
type="checkbox"
onChange={(e) => handleChange(e, i)}
/>
</>
);
});
};
export default function App() {
return <Quiz1 />;
}
我想做的是,用布尔值填充答案数组 values.My 复选框是动态填充的,但只有四个。如果未选中复选框,则其值应为 false,如果选中,则应为 true.Values 应对应于数组索引,我的意思是,如果第一个复选框被切换,则只有答案 [0] 应该更改,如果第二个复选框被更改,则答案[1] 等等..
沙盒https://codesandbox.io/s/elated-thompson-7rthy?file=/src/App.js
如果您也能帮我设置选中的值,我将不胜感激。
最后我将这个值设置为上下文存储,最后发送到服务器。
const Quiz1 = (props) => {
const [answers, setAnswers] = useState([false, false, false, false]);
const handleChange = (e) => {
setAnswers([...answers, e.target.checked]);
setQuizState({ id: 0, question_id: question.question_id, answer: [answers] });
};
return (
{question?.options?.map((option, i) => {
<Checkbox
id={i}
name={option}
checked={WHAT TO PUT HERE?}
onChange={(e) => handleChange(e)}
/>}
)
}
如果我没理解错的话,你可以直接使用地图函数的索引来使用正确答案索引。
checked={answer[i]}
设置setAnswers([...answers, e.target.checked])
会将新的新事件值附加到您的答案数组。相反,您应该覆盖答案值。
answer[i] = e.target.value
您可以对状态进行浅表复制并更改其值。这是您想要的东西的简单示例:
import { useEffect, useState } from "react";
const Quiz1 = (props) => {
const question = {
options: ["1", "2", "3", "4"]
};
const [answers, setAnswers] = useState([false, false, false, false]);
useEffect(() => {
console.log(answers);
}, [answers]);
const handleChange = (e, i) => {
let copy = [...answers];
let current = copy[i];
current = e.target.checked;
copy[i] = current;
setAnswers(copy);
};
return question?.options?.map((option, i) => {
return (
<>
<label>{option}</label>
<input
aria-label={option}
id={i}
name={option}
checked={answers[i]}
type="checkbox"
onChange={(e) => handleChange(e, i)}
/>
</>
);
});
};
export default function App() {
return <Quiz1 />;
}