在react中将元素删除到状态列表

时间:2019-05-17 23:23:17

标签: javascript reactjs

我的状态上有以下变量:

Category  Email_x Email                SamAccountName
--------  ------- -----                --------------
category1 email.1 sample@gmail.com
category2 email.3 sample2@gmail.com
category3 email.2 sample3@gmail.com
category3 email.4 sample44@hotmail.com
category3 email.6 sample55@gmail.com

我想做的是删除同一列表中的某个项目,为此我编写了此方法:

this.state = {

        playerList: {
            player: [
                {
                    playerAlias: [
                        {
                            name: null
                        }
                    ],
                    idPlayer: null,
                    playerName: null,
                    broadcastChannel: null,
                    clusterName: null
                }
            ]
        }

    }

尽管这可以工作,但不起作用,但尝试在render方法上迭代变量的所有元素时,会出现以下错误:

  

尝试循环执行此操作时无法读取未定义的映射this.state.playerList.player.map((player)

1 个答案:

答案 0 :(得分:4)

几件事:

  1. Array#map旨在使用修改后的值创建一个新数组。 Array#forEach是在这种情况下使用的适当方法。但是在这种情况下,您不应使用任何一种,因为:
  2. 您实际上是在重新发明Array#filter。您可以将filter视为具有完全相反逻辑的相同操作:仅在playerAux != player
  3. 时将值保留在我现有的数组中
const newList = this.state.playerList.player.filter((playerAux) => {
    return playerAux != player
})
this.setState({ playerList:newList })

编辑:查看完逻辑顺序后,情况非常糟糕。请记住playerAux是什么。实际上是对象本身:

 {
{
  playerAlias: [
      {
          name: null
      }
  ],
  idPlayer: null,
  playerName: null,
  broadcastChannel: null,
  clusterName: null
}

我不知道您要比较什么,但是可能是playerName,应该是playerAux.playerName != player