我试图将所有选中的复选框放在状态数组中。我可以向数组中添加值,但是当我取消选中该框时,无法删除该值。我尝试使用拼接和按索引删除,也尝试通过过滤器删除。它可以工作,但是工作缓慢且不正确。例如,我可以取消选中所有复选框,并且一个值保持状态。请检查我在做什么错这是一个沙盒链接,下面是我的代码
const [state, setState] = useState({
address: [],
})
const checkboxChange = (e) => {
const { name, checked } = e.target
if (checked === true) {
setState((prevState) => ({
...prevState,
address: [...prevState.address, name],
}))
}
if (checked === false) {
setState((prevState) => ({
...prevState,
address: [...prevState.address].filter((it) => it.id !== it.id),
}))
}
}
{list.map((it, index) => (
<div key={it.id}>
<label>
<input
className="mr-2"
checked={state.address.index}
key={it.id}
name={it.id}
defaultValue="false"
onChange={checkboxChange}
type="checkbox"
/>
{it.name}
</label>
</div>
))}
您正在比较it.id !== it.id
哪个将始终为false。
state.address
是一组ID,与没有对象id
属性,你要比较对输入的每一个name
的onChange
事件对象。
prevState.address
el !== name
码
const checkboxChange = (e) => {
const { name, checked } = e.target;
if (checked) {
setState((prevState) => ({
...prevState,
address: [...prevState.address, name],
}))
} else {
setState((prevState) => ({
...prevState,
address: prevState.address.filter((el) => el !== name),
}))
}
}
如果您确实希望控制您的输入,那么我建议:
onChange
事件中的检查值value
属性与defaultValue
属性码
const App = (props) => {
const [state, setState] = useState({
address: {}, // <-- object map
})
useEffect(() => {
console.log(state)
}, [state])
const checkboxChange = (e) => {
const { name } = e.target
setState((prevState) => ({
...prevState,
address: {
...prevState.address,
[name]: !prevState.address[name], // <-- toggle state
},
}))
}
return (
<div>
{list.map((it, index) => (
<div key={it.id}>
<label>
<input
className="mr-2"
checked={state.address.index}
key={it.id}
name={it.id}
value={state.address[it.id]} // <-- set from checked state
onChange={checkboxChange}
type="checkbox"
/>
{it.name}
</label>
</div>
))}
</div>
)
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句