【问题标题】:Getting values from checkbox group and adding/removing them from array从复选框组中获取值并从数组中添加/删除它们
【发布时间】:2020-08-21 14:34:19
【问题描述】:

我正在创建一个包含一组复选框的表单。

当点击复选框时,我会获取该特定复选框的值并添加到一个数组(我正在使用 useState 挂钩),如果我取消选中它将从数组中删除该元素。

到目前为止,这是我的代码:

const ContactUs = () => {
  const [cities, setCities] = useState([])

  useEffect(() => {
    console.log(cities)
  })

  const handleCheck = (e) => {
    if (e.target.checked) {
      setCities([...cities, e.target.value])
    } else {
      removeCities()
    }
  }

  const removeCities = () => {
    setCities(() => cities.splice(DT.length - 1, 1))
  }

  return (
    <Content>
      <form>
        <SectionTitle>Day Tours</SectionTitle>

        <Checkbox
          type="checkbox"
          id="1"
          label="Dublin"
          value="dublin"
          name="dublin"
          onChange={handleCheck}
        />
        <Checkbox
          type="checkbox"
          id="2"
          label="New York"
          value="New York"
          name="new-york"
          onChange={handleCheck}
        />
        <Checkbox
          type="checkbox"
          id="3"
          label="Torino"
          value="Torino"
          name="torino"
          onChange={handleCheck}
        />
      </form>
    </Content>
  )
}

我可以将它添加到数组中,但我似乎无法删除它(或删除正确的)。

我尝试了拼接和切片方法,但我没有完全掌握它们的概念。

【问题讨论】:

  • 可以编辑帖子并将数组上传到帖子吗? @Yuri_Rech

标签: javascript arrays reactjs react-hooks


【解决方案1】:

我不知道 DT 是什么,因为您还没有共享您的整个代码,但我认为您可以通过另一种仍然有效的声明方式来解决这个问题:

过滤掉数组,使其返回所有被检查的内容并过滤(删除)未检查的内容:

在你的 else 块中:

setCities(cities.filter(city =&gt; city !== e.target.value))

Filter 将始终返回一个新数组,其值与过滤条件匹配,在这种情况下,它将返回除 e.target.value 之外的所有内容,这是我们根据您的逻辑想要的,else 块将在执行时执行未选中。

【讨论】:

  • 嗨,我刚刚更新了它 DT 实际上是城市。我的代码基本上是它与其他两个文本输入。我会检查你的答案!谢谢
  • 是的,我怀疑但不能确定。我建议您不要操纵初始数组。如果复选框的状态(选中/未选中)是由cities 钩子驱动的(它应该是,而不是数组变量),那么只要它未选中就将其从那里删除。在状态更改时,组件将重新渲染,但现在它将在没有检查值的情况下重新渲染,依此类推。这是(React 的重点之一)在状态变化时重新渲染。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多