乐趣区

React修改数组对象中的某一个属性值

一般我们会把 Controller(控制器)里面的数据经过处理给到 View(视图)层做显现, 这种简单的赋值方式如下

this.setSate({toList: response.data})

Vue 的实现如下

this.todoList = response.data;

比如这是后台传递给我们的数据,我们想要更改数组对象的其中一项 `name` 属性值该如何实现呢?
 state = {// 类似于 Vue 里面的 data()
    todoList: [
      {
        img: "xxx",
        name: "小飞",
      },
      {
        img: "xxx",
        name: "小候",
      },
    ]
  };

我们先来看一下在 vue 中如何实现
this.todoList[0].name = "Jony";
// 或者
this.$set(this.todoList[0],"name","Jony");

哇~ 其实比较简单,那么在 React 中如何实现呢?

想象中是这样的 …

 this.setState({todoList[0].name:"Jony"
    })
    // 这样报错了,立马想到另一种方式
   let obj = {
      img:"xxx",
      name:"Jony"
    }
    this.setState({todoList[0]:obj
    })

都是不行的,我们的编辑器和浏览器都在报错,告诉我们不能这么写

那么怎么来实现呢

// 三目运算符 `key == 0` 是我写死的
// 如果是点击传入的话可以是 `key == index(下标)`
 const todoList = [...this.state.todoList];   // 浅拷贝一下
  this.setState({todoList: todoList.map((item,key)=>key == 0?{...item,name: "Jony"}:item)
    });

这是官网针对 setState 的描述

退出移动版