首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在ReactJS的functional component中管理4复选框的状态?

如何在ReactJS的functional component中管理4复选框的状态?
EN

Stack Overflow用户
提问于 2019-12-18 22:58:37
回答 3查看 57关注 0票数 0

如何创建一个恰好有4个复选框的功能组件?我创建了一个动态映射数组,并使用以下命令设置它的值:

代码语言:javascript
运行
复制
const [checked, setChecked] = useState([false, false, false, false])

然后,对于一个函数,我改变了它的状态,类似于:

代码语言:javascript
运行
复制
const checkboxes = array.map( (el, index) => {

return <Checkbox

checked={checked[index]}

onChange={checkedHandler}/>

}

这是处理程序:

代码语言:javascript
运行
复制
const checkedHandler = (event, index) => {

setChecked(...)

//Well, here I don't know how change the particular value of the array...

}

或者我必须为每个复选框选中状态创建一个useState?如果有必要,如何将此复选框的状态传递给父组件?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-12-18 23:05:25

您正在以错误的方式调用checkedHandler。您必须:

代码语言:javascript
运行
复制
onChange={checkedHandler}

你应该有:

代码语言:javascript
运行
复制
onChange={() => {checkedHandler(index)}}

在处理程序本身中,您应该复制当前数组以防止其发生变化,并更改indexed数组的值:

代码语言:javascript
运行
复制
const checkedHandler = (index) => {
  const newChecked = [...checked];
  newChecked[index] = !checked[index]; // toogle the checkbox
  setChecked(newChecked);
}
票数 2
EN

Stack Overflow用户

发布于 2019-12-18 23:07:03

id分配给每个复选框,如id="1"id="2"等。

那么你的checkedHandler()函数就像这样:

代码语言:javascript
运行
复制
checkedHandler(event) {
    const newChecked = [...checked]
    newChecked[parseint(event.target.id) - 1] = true
    setChecked(newChecked)
}
票数 2
EN

Stack Overflow用户

发布于 2019-12-18 23:05:55

有很多方法可以做到这一点,如果你的情况很简单,你可以只浅拷贝数组,只改变你想要的索引。

代码语言:javascript
运行
复制
let newChecked = [...checked]
newChecked[index] = value
setChecked(newChecked)

但对于更复杂的情况,请查看Correct modification of state arrays in ReactJS

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59394697

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档