Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/427.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript redux删除操作中的切片与过滤器_Javascript_Reactjs_Redux - Fatal编程技术网

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;
}