【问题标题】:How to modify a certain object in array of objects that stored in redux state [duplicate]如何修改以redux状态存储的对象数组中的某个对象[重复]
【发布时间】:2019-08-15 09:27:04
【问题描述】:

假设我将数据存储在这样的 redux 状态

state = {
records : [
    {id:"1", name:"foo", city:"A"},
    {id:"2", name:"bar", city:"B"},
    {id:"3", name:"abc", city:"C"},
]
}

如何使用不可变的方式动态更改任何记录的任何属性?

【问题讨论】:

    标签: arrays reactjs redux react-redux javascript-objects


    【解决方案1】:

    类似这样的:

    case 'SOMETHING': 
    const recordsCopy = {...state.records};
    //change recordsCopy ...
    const recordToChange = recordsCopy.find(x => x.id === '3')
    if(recordToChange) {
       recordToChange.name = 'new name';
    }
    return {...state, records: [...recordsCopy]}
    

    【讨论】:

    • 如何只更改3号记录的名称?
    • 我更新了答案。
    • 如果没有id属性可以改吗?
    • 查找逻辑取决于您和您的设计。无论如何,您应该先找到您的项目。
    • 我的意思是我如何用数组索引而不是 id 属性做同样的事情
    【解决方案2】:

    假设您有 id (let 2) 的记录,并且您想更新 name (to "pqr")

    function reducer (state, action){
      const {type, payload}  = action
      switch(type){
      case: "UPDATE": 
           return updateRecord(state, payload.id, payload.newname)
      default: return state;
      }
    }
    
    function updateRecord(state, id, newName){
      const newRecords = state.records.map(rec => {
         if(rec.id === id){ return {...rec, name: newname} }
         return rec
       })
      return {...state, records: newRecords}
    
    }
    

    【讨论】:

      猜你喜欢
      • 2021-05-23
      • 2020-11-01
      • 2018-05-03
      • 1970-01-01
      • 1970-01-01
      • 2020-03-25
      • 1970-01-01
      • 2016-10-16
      • 2019-08-06
      相关资源
      最近更新 更多