Javascript redux删除操作中的切片与过滤器
从Javascript redux删除操作中的切片与过滤器,javascript,reactjs,redux,Javascript,Reactjs,Redux,从Redux文档中,我知道,我们永远不应该改变状态,这就是为什么我们应该使用concat和slice方法,因此我最终使用了以下缩减器(为了简化,删除了大多数操作): 在我的例子中,我没有要删除的元素的索引,所以我可以使用过滤器?像这样: export default function blocks(state = [], action) { switch (action.type) { case DELETE_BLOCK: return state
Redux
文档中,我知道,我们永远不应该改变状态,这就是为什么我们应该使用concat
和slice
方法,因此我最终使用了以下缩减器(为了简化,删除了大多数操作):
在我的例子中,我没有要删除的元素的索引,所以我可以使用过滤器?像这样:
export default function blocks(state = [], action) {
switch (action.type) {
case DELETE_BLOCK:
return state.filter(e => e.id !== action.blockId);
default:
return state;
}
过滤器
不会改变状态,它会返回一个新的数组
,因此这里没有任何错误
在处理不可变
数据时,我们尽量避免使用过滤器
,因为它总是返回一个新的引用,破坏了引用相等性检查=
。但是,如果您认为状态没有改变(我认为您没有这样做,这没关系),那么您不必担心使用过滤器,因为reducer是一个普通的JavaScript函数,所以为它编写测试非常容易。您只需给它一个状态before
和一个操作
,然后检查它是否返回预期的状态before
。您可以在状态上调用类似的函数,如果您意外地改变了状态,则测试将失败。视频系列展示了这种技术
export default function blocks(state = [], action) {
switch (action.type) {
case DELETE_BLOCK:
return state.filter(e => e.id !== action.blockId);
default:
return state;
}