【问题标题】:Trying to delete a property in an array that is also within in array in React尝试删除数组中的属性,该属性也在 React 的数组中
【发布时间】:2020-03-27 19:58:29
【问题描述】:

我正在尝试向我的应用程序添加功能,以删除以下状态的列表数组中的值

shoeList : [ 
  {name: 'Nike', 
   list : [
    {type: 'boots', revenue: '1000000', gender: 'mens', price: '49.99', id: 3},
    {type: 'shoes', revenue: '13280100', gender: 'womens', price: '99.99', id: 2}
    ]
  }
],

我了解 ID 必须相等才能进行删除。现在我正在尝试访问要删除的相应行(类型、收入、性别和价格),但不知道如何访问数组中的属性。

这是我目前的代码

deleteShoe = (id) => 
  {
    let shoeList = this.state.shoeList.filter(shoe =>{
      return (
        shoe.list.filter(shoeid =>{
          return shoeid.id !== id
        }
        )
      )
    });
this.setState({
  shoeList: shoeList
})
}

显然这段代码没有也无法理解为什么。我能想到的唯一原因是过滤器不能嵌套,但如果是这样,我将如何实现它。任何帮助都会很棒

【问题讨论】:

    标签: arrays reactjs nested state


    【解决方案1】:

    你已经接近了。您只是错过了重新分配 shoe.list 并在过滤后更新了鞋子列表。

    deleteShoe = (id) => {
        const { shoeList } = this.state;
        const newShoeList = shoeList.map(shoe => {
          shoe.list = shoe.list.filter(shoeid => shoeid.id !== id)
          return shoe;
        });
        this.setState({
          shoeList: newShoeList
        })
    }
    

    这应该会删除适当的鞋子 ID,并使用新过滤的鞋子列表重新分配您的 shoe.list

    【讨论】:

    • 感谢您的帮助!
    • 因为this.setState是异步的,所以当你根据之前的状态更新状态时最好传递一个函数,而不是一个对象......像this.setState ((prevState) => {//Do your logic and return your state})这样的东西。跨度>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-28
    • 1970-01-01
    相关资源
    最近更新 更多