javascript - 使用 onClick 从列表中删除单个项目

标签 javascript json reactjs multidimensional-array onclick

我有以下带有多个对象数组的对象。我想知道如何使用 onClick 从列表中删除单个项目。

我知道我可以尝试使用拼接,但我不知道如何在这个对象形状内做到这一点

状态

const [filters, setFilters] = useState(initialData || [])

我尝试过这样

处理点击

const handleClick = () => {
    const newState = filters
    const index = newState[key].findIndex((a) => a.id === id)

    if (index === -1) return
    newState[key].splice(index, 1)

    setFilters(newState)
  }

数据对象

{
  "services": [
    {
      "id": "1b975589-7111-46a4-b433-d0e3c0d7c08c",
      "name": "Account"
    },
    {
      "id": "91d4637e-a17f-4b31-8675-c041fe06e2ad",
      "name": "Income"
    }
  ],
  "accountTypes": [
    {
      "id": "1f34205b-2e5a-430e-982c-5673cbdb3a68",
      "name": "Investment"
    }
  ],
  "channels": [
    {
      "id": "875f8350-073e-4a20-be20-38482a86892b",
      "name": "Chat"
    }
  ]
}

点击时渲染

<div onClick={handleClick}>
   <Icon fileName="smallClose" />
</div>

最佳答案

也许是因为您没有在任何地方声明“id”变量?如果它位于 map 循环中,您可以在 div 事件上发送元素 id。我认为这可以解决您的问题。

<div onClick={() => handleClick(id)}>

然后将其作为参数导入到您的函数中:

 const handleClick = (id) => {
    const newState = filters
    const index = newState[key].findIndex((a) => a.id === id)

    if (index === -1) return
    newState[key].splice(index, 1)

    setFilters(newState)
  }

此外,当您声明 newState 值时,请确保在声明中使用扩展运算符,在您当前的行为中,您正在改变您的状态,并且在 react 中不建议这样做:

const newState = [...filters];

关于javascript - 使用 onClick 从列表中删除单个项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68434432/

相关文章:

json - 是否有使用 json 对数组/映射进行编码的函数?

reactjs - React useState hooks - 如果通过 props 传递表单,文本输入在键入时会失去焦点

html - 如何添加内联样式宽度:calc(100%/var) in reactjs?

reactjs - 使用 TypeScript 编写 React 高阶组件

javascript - Onclick 事件未选择正确的开关选项

javascript - 使用属性名称变量定义对象

javascript - 为什么这两个正则表达式的行为不一样?

java - Struts2:如何在 ActionSupport 中获取 ServletRequest 实例

javascript - 如何使用一个按钮 Javascript 在两个图像之间切换

ios - 类型[字符串: String] does not conform to protocol 'AnyObject'