1、既然reducer强调不可变数据的概念为何不直接返回一个深拷贝之后的state,例如_.cloneDeep
2、既然不能直接更改state,为何不利用Object.freeze,或者类似的方法让state不可改变
import { SET_BOOKS, ADD_BOOK, REMOVE_BOOK, CHANGE_BOOK_PRICE } from '../actions/book.js'
const initBooks = []
const books = (state, action) => {
if (state === undefined) {
state = initBooks
}
//或者运用性能更好的_.cloneDeep
let tmpBooks = JSON.parse(JSON.stringify(state))
switch (action.type) {
case SET_BOOKS:
return action.books
break
case ADD_BOOK:
// return [...state,action.newBook]
tmpBooks.push(action.newBook)
return tmpBooks
break
case REMOVE_BOOK:
return state.filter(item => {
return item.id !== action.bookId
})
break
case CHANGE_BOOK_PRICE:
tmpBooks.forEach(item => {
if(item.id===action.bookId){
item.price=action.newPrice
}
});
return action.books
break
default:
return state
}
}
export default books
www说
呼唤远方
拉风的咖菲猫
随时随地看视频慕课网APP
相关分类