React修改數組對象中的某一個屬性值

通常咱們會把Controller(控制器)裏面的數據通過處理給到View(視圖)層作顯現,這種簡單的賦值方式以下html

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

Vue的實現以下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中如何實現呢?react

想象中是這樣的...數組

this.setState({
      todoList[0].name:"Jony"
    })
    //這樣報錯了,立馬想到另外一種方式
   let obj = {
      img:"xxx",
      name:"Jony"
    }
    this.setState({
      todoList[0]:obj
    })

都是不行的,咱們的編輯器和瀏覽器都在報錯,告訴咱們不能這麼寫
image.png瀏覽器

那麼怎麼來實現呢編輯器

//三目運算符 `key == 0` 是我寫死的
//若是是點擊傳入的話能夠是`key == index(下標)`
 const todoList = [...this.state.todoList];   //淺拷貝一下
  this.setState({
      todoList: todoList.map((item,key)=>key == 0?{...item,name: "Jony"}:item)
    });

這是官網針對 setState的描述
image.pngthis