我正在构建一个React应用程序中的测验,并且正在处理一个让用户通过复选框选择多个选项的特定问题。到目前为止,对于其他仅有单选按钮选项的问题,我已经成功地将所选答案设置为状态。但是我卡在了如何处理具有复选框选项的问题上。我需要每次选中或取消选中复选框时更新state。这个复选框问题的代码如下:
import React, { useState, useEffect } from "react";
import { connect } from "frontity";
import { GridWrap, GridRow, GridColumn } from "emotion-flex-grid";
import QuizCheckbox from "/src/components/quiz-checkbox";
import QuestionCommonContainer from "../question-common.style";
const Question3 = ({ actions }) => {
const [checkedItems, setCheckedItems] = useState({});
const checkboxes = [
{
key: "checkBox1",
label: "Back",
},
{
key: "checkBox2",
label: "Side",
},
{
key: "checkBox3",
label: "Stomach",
},
];
const handleChange = (event) => {
setCheckedItems({
...checkedItems,
[event.target.name]: event.target.checked,
});
};
return (
<QuestionCommonContainer>
<GridWrap>
<GridColumn px={["l"]}>
<GridRow wrap="wrap" justify="center">
<GridColumn width={[12, 12, 12, 4]}>
{checkboxes.map((item, id) => (
<GridColumn pb={"l"} key={id}>
<QuizCheckbox
name={item.label}
label={<h5>{item.label}</h5>}
selected={checkedItems[item.label]}
onChange={handleChange}
/>
</GridColumn>
))}
</GridColumn>
</GridRow>
</GridColumn>
</GridWrap>
</QuestionCommonContainer>
);
};
export default connect(Question3);
我在思考是否需要修改handleChange函数,但我不确定这是否正确或者我需要如何更改。任何帮助都将不胜感激。
更新:
前两个评论帮了我很多。我想我已经非常疲惫了。我发现项目已添加到状态中,但有一个小故障:
所以我有3个复选框。我在handleChange函数中添加了console.log(checkedItems)
,以便在控制台中查看行为。
我去选择我的第一个选项,控制台返回Object { }
,即一个空对象,即使我已经选择了一个项目。我尝试选择第二个项目,控制台返回
{
"Side": true
}
这是第二个选择。我不确定为什么第一个选择没有被包含在返回的对象中。