2017-07-26 84 views
0

我有一个减速,那首先得书数组对象的列表没有书副本count属性,而且比每本书得到它的拷贝数在终极版减速器如何更新数组对象内1个属性

const bookList= (state = [], action) => { 
    switch (action.type) { 
     case 'BOOKS_REQUEST_SUCCEEDED': 
      return Object.assign({}, state, action.payload); 
     case 'BOOKS_COUNT_REQUEST_SUCCEEDED': 
      return updateBookCopiesCount(state, action); 
     default: 
      return state 
    } 
} 

const updateBookCopiesCount = (state, action) => { 
    const newState = state.map((book) => { // updating only the book copies count 
     if (book.Id === action.payload.Id) { 
      return { ...book, 
       copiesCount: action.payload.copiesCount 
      }; 
     } 
     return book; 
    }); 
    return newState; 
} 

我的问题是,什么是正确的终极版的做法: 应该每次我整个数组复制为每个copiesCount更新所有对象,还是确定只复制,将其与新的属性修改的对象

在此先感谢

回答

0

当前updateBookCopiesCount功能是正确的。您需要复制需要更新的每个嵌套级别,但仅需需要更新的内容。所以,你需要复制state(其正在通过state.map()完成的,你需要复制只是需要更新的阵列内的一个对象。所有其他对象应返回原样。

有关更多信息,请参阅Redux文档的Structuring Reducers - Immutable Update Patterns部分。

1

Redux仅要求您必须在数据发生任何更改时才返回新的值实例,即强制执行不变性。 它并没有强制你的reducer的特定形式。 所以,你的问题有效的不是关于redux方法,而是关于一般的JavaScript任务如何以不可变的方式执行数据转换。

从我的观点来看,你的代码对于这个特定的任务来说绝对正常。