React中的受控复选框

原始的

我试图将所有选中的复选框放在状态数组中。我可以向数组中添加值,但是当我取消选中该框时,无法删除该值。我尝试使用拼接和按索引删除,也尝试通过过滤器删除。它可以工作,但是工作缓慢且不正确。例如,我可以取消选中所有复选框,并且一个值保持状态。请检查我在做什么错这是一个沙盒链接下面是我的代码

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>
      ))}
德鲁·里斯(Drew Reese)

问题

您正在比较it.id !== it.id哪个将始终为false。

state.address是一组ID,与没有对象id属性,你要比较对输入的每一个nameonChange事件对象。

  1. 只是过滤 prevState.address
  2. 比较 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),
    }))
  }
}

编辑控制中的复选框

受控输入

如果您确实希望控制您的输入,那么我建议:

  1. 将检查的值存储在地图中
  2. 只需切换onChange事件中的检查值
  3. 使用输入的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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

React(Facebook):受控复选框的托管状态

来自分类Dev

JavaScript中的复选框

来自分类Dev

表格中的复选框

来自分类Dev

更改CGridView中的ID复选框

来自分类Dev

在jQuery中删除选中的复选框

来自分类Dev

LotusScript中的复选框

来自分类Dev

angular js中的复选框功能

来自分类Dev

React-如何实现复选框?

来自分类Dev

计算React.js中的选中复选框

来自分类Dev

表列中复选框的对齐

来自分类Dev

ReactJS:状态中的动态复选框

来自分类Dev

引导复选框中的Onchange事件

来自分类Dev

更改受控复选框的选中属性(反应)

来自分类Dev

在React JS中设置复选框值

来自分类Dev

在React.js中获取复选框的值

来自分类Dev

复选框设置状态,并在React中重置

来自分类Dev

使用useState更新React中多个复选框的状态

来自分类Dev

反应受控复选框输入。使用“值”或“选中”属性?

来自分类Dev

如何在React JS中获取复选框的值

来自分类Dev

如何计算React功能组件中的选定复选框?

来自分类Dev

单击复选框后,React应用程序中的复选框未更改状态

来自分类Dev

处理EXPO React Native中的多个复选框

来自分类Dev

简单React应用程序中的受控组件(复选框)和RESTful模拟存在问题吗?

来自分类Dev

如何在React中控制多个复选框?

来自分类Dev

REACT动态复选框

来自分类Dev

JS中的复选框

来自分类Dev

计算React.js中的选中复选框

来自分类Dev

如何使用React中的复选框管理状态?

来自分类Dev

标记复选框已完成 - React