【发布时间】:2015-11-20 13:46:05
【问题描述】:
在redux project的todoMVC示例中,处理todos的reducer有以下几行:
export default function todos(state = initialState, action){
...
case EDIT_TODO:
return state.map(todo =>
todo.id === action.id ?
Object.assign({}, todo, { text: action.text }) :
todo
)
}
这部分代码处理更新特定的待办事项。我的问题是,因为 state.map() 总是会返回一个新数组。那么,是否还需要这样做:
Object.assign({}, todo, { text: action.text})
可以吗:
Object.assign(todo, { text: action.text})
更新
我了解Object.assign({}, blah...) 与Object.assign(obj, blah...) 之间的区别。让我重新表述我的问题:
Redux 希望 reducer 返回一个新状态,而不是改变现有状态。我得到它。在我的示例中,我有一个对象数组。我想交换前两个元素的顺序。查看jsbin example here。
- 由于Array.map 总是返回一个新数组,因此对返回数组的引用肯定是一个新数组。检查。
- 但是,返回数组中的元素并非全新。对前两个元素的引用是新的。但是,第三项不是。它与旧数组中的第三项相同。
所以我的问题是关于第三个元素,我应该使用:
Object.assign({}, third_element) 或简单的return the third_elment
Redux 是想要一个新数组,其中包含对其中每个对象的新引用(即使这些新对象中存储的值与旧对象相同)还是只是一个只有更新元素是新元素的新数组?
【问题讨论】:
标签: javascript reactjs redux