【问题标题】:Delete objects from array in state using unique ID使用唯一 ID 从状态数组中删除对象
【发布时间】:2019-04-01 09:38:22
【问题描述】:

我列出了哪些元素必须是可删除的(例如使用删除按钮)。我如何从反应中意识到这一点?

这是我的状态:

state = {
        infos: [
            {
                id: 1,
                info: 'some info',
                deleted: false
            },
            {
                id: 2,
                info: 'some info',
                deleted: false
            },
            {
                id: 3,
                info: 'some info',
                deleted: false
            }
        ]
    }

这是我尝试过的删除功能:

removeInfo() {
  this.state.infos.splice(key, 0)
}

这是我映射后得到的jsx代码:

{
                      this.state.infos.map((item, key) => {
                          return (
                              <ListItem key={item.key + key}>
                                  <Icon color="gray" f7="home" />
                                  <span className="text-black">{item.info}</span>
                                  <Button><Icon f7="edit" color="#39b549" /></Button>
                                  <Button onClick={this.removeInfo}><Icon color="black" f7="trash" /></Button>
                              </ListItem>
                          )
                      })
                  }

【问题讨论】:

    标签: javascript arrays reactjs object html-framework-7


    【解决方案1】:

    你需要做一些改变。

    首先我们需要将要移除的项目的 id 传递给移除函数:

     <Button onClick={()=>this.removeInfo(item.id)}><Icon color="black" f7="trash" /></Button>
    

    然后您需要使用 setState 以不可变的方式从数组中删除项目。

    removeInfo(id) {
      this.setState(ps=>({infos:ps.infos.filter(x=>x.id!=id)}))
    }
    

    splice 改变数组。

    【讨论】:

    • 非常感谢,这是最短最简单的解决方案!
    【解决方案2】:

    您需要使用 setState 并注意您不能改变状态,因此您需要使用扩展运算符创建一个新数组。

    function removeInfo(index) {
      this.setState((prev) => ({
        infos: [...prev.infos.slice(0, index), ...prev.infos.slice(index+1)]
      }))
    }
    

    【讨论】:

    • 您的回答也很有帮助。谢谢你的帮助
    猜你喜欢
    • 1970-01-01
    • 2021-06-17
    • 1970-01-01
    • 2021-03-10
    • 1970-01-01
    • 2016-09-20
    • 2021-01-12
    • 2021-03-18
    • 2016-12-25
    相关资源
    最近更新 更多