arrays - 处理多个复选框并根据选择推送或过滤值
问题描述
如何处理复选框是否被选中,如果选中则推送对象,如果未选中则删除?
这是设置为 state 的初始 arr
let arr=[{lable:lable1,value:value1}
{lable:lable2,value:value2}
{lable:lable3,value:value3}
]
选中复选框时触发的句柄函数
function handleChange(item) {
let temp = [...arr];
if (temp.includes(item.value)) {
temp = temp.filter((value) => value != item.value);
} else {
temp.push(item.value);
}
setState(temp);
}
基于数组迭代的多个复选框
{arr.map((item, i) => {
return (
<label className="check-wrap">
<input
className="check-field"
checked={ ? } // how to handle checkbox is selected or not
name={item.lable}
onChange={() => handleChange(item)}
type="checkbox"
/>
<span className="check-label">{item.value}</span>
</label>
</div>
))}
代码沙盒中的问题
解决方案
您应该使用prevState
而不是直接引用状态值。
// ... rest of the onChange function
this.setState(prevState => ({
arr: prevState.arr.includes(temp)
? prevState.arr.filter(value => value !== item.value)
: [...prevState.arr, temp]
}))
您可以在此处阅读reactjs中的setState
操作
Hooks 的工作原理相同:
const [arr, setArr] = useState([])
// ...later
setArr(prevArr => prevArr.includes(temp)
? prevArr.fitler(value => value !== item.value)
: [...prevArr, temp]
)
推荐阅读
- c - y=-1 和 y=0xFFFFFFFF 有什么区别?
- powershell - 所有用户的 Remove-AppxPackage
- python - 具有精确词匹配搜索的 RDD 过滤器
- generics - 如何使用多个参数化类型(使用 where 子句)以便我可以使用任一参数
- python-3.x - 谷歌日历 api - 添加文件附件
- c# - 没有重复循环的有效循环方式
- python-3.x - 获取 IndexError:只有整数、切片 (`:`)、省略号 (`...`)、numpy.newaxis (`None`) 和整数或布尔数组是有效的索引
- javascript - 避免基本身份验证弹出窗口
- c++ - 无法在for循环中打印
- visual-studio-code - 在 vscode 中安装 Platformio IDE 失败