【发布时间】:2020-10-30 15:39:32
【问题描述】:
我有两个 React 组件,即Form 和SimpleCheckbox。
SimpleCheckbox 使用了一些 Material UI 组件,但我相信它们与我的问题无关。
在Form 中,useEffect 调用api.getCategoryNames(),它解析为一个类别数组,例如['Information', 'Investigation', 'Transaction', 'Pain']。
我的目标是在父组件 (Form) 中访问复选框的状态(选中或未选中)。我已采用this question 中建议的方法。(请参阅经过验证的答案)
有趣的是,当我记录 checks 时,它给出了(在 api 调用解决之后):
{Pain: false}
我的期望是:
{
Information: false,
Investigation: false,
Transaction: false,
Pain: false,
}
此外,当我点击复选框时,checks 状态会正确更新。例如,假设我检查了Information 和Investigation 框,check 变为以下内容:
{
Pain: false,
Information: true,
Investigation: true,
}
这里是组件:
const Form = () => {
const [checks, setChecks] = useState({});
const [categories, setCategories] = useState([]);
const handleCheckChange = (isChecked, category) => {
setChecks({ ...checks, [category]: isChecked });
}
useEffect(() => {
api
.getCategoryNames()
.then((_categories) => {
setCategories(_categories);
})
.catch((error) => {
console.log(error);
});
}, []);
return (
{categories.map(category => {
<SimpleCheckbox
label={category}
onCheck={handleCheckChange}
key={category}
id={category}
/>
}
)
}
const SimpleCheckbox = ({ onCheck, label, id }) => {
const [check, setCheck] = useState(false);
const handleChange = (event) => {
setCheck(event.target.checked);
};
useEffect(() => {
onCheck(check, id);
}, [check]);
return (
<FormControl>
<FormControlLabel
control={
<Checkbox checked={check} onChange={handleChange} color="primary" />
}
label={label}
/>
</FormControl>
);
}
【问题讨论】:
标签: javascript reactjs