在React.js中将复选框的值添加并移除为数组状态

问题描述

我正在使用mui复选框组件,这就是我的显示方式:

 <FormControl component="fieldset">
    <FormGroup aria-label="position" column>
        {sortedData.map((obj) => {
            return (
                <FormControlLabel
                    value="type"
                    control={<CheckBox color="primary"/>}
                    label={obj}
                    name={obj}
                    onChange={handleTypeCheckBoxChange}
                    labelPlacement="end"
                />
            );
        })}
    </FormGroup>
</FormControl>

现在此功能上的handleTypeCheckBoxChange我想在用户选中或取消选中时添加删除复选框的值。

这是我尝试执行的操作,但是没有用。它给了我NaN:

const [typeValue,setTypeValue] = useState([]) // the state array where I wanna store the checkBox checked values

const handleTypeCheckBoxChange = (event) => {

    let typeValuesArray = []
    let index

    if (event.target.checked) {
        setTypeCheckBoxCount(prevstate => prevstate + 1)
        typeValuesArray.push(+(event.target.name))
    } else {
        setTypeCheckBoxCount(prevstate => prevstate - 1)
        index = typeValuesArray.indexOf(+(event.target.name))
        typeValuesArray.splice(index,1)
    }

    setTypeValue(typeValuesArray)
}

我该如何解决

解决方法

pushindexOf方法参数中删除+号。
因为: +'anystring' = NaN

,

(代表问题作者发布解决方案,将答案移至答案空间)

此问题已解决。我将代码更改为此:

 const handleTypeCheckboxChange = (event,index) => {


        if (event.target.checked) {
            setTypeCheckboxCount(prevState => prevState + 1)
            
            setTypeValue([...typeValue,event.target.name])
        } else {
            setTypeCheckboxCount(prevState => prevState - 1)
            
            setTypeValue(
                typeValue.filter( v => v !== event.target.name)
            )


        }

        
    }