美文网首页
使用 immutability-helper 的经验教训

使用 immutability-helper 的经验教训

作者: VioletJack | 来源:发表于2020-07-08 22:10 被阅读0次

    题外话,昨天写 immutability-helper 的时候有个东西把我给坑惨了。需求是将数组 A 中的一个元素移动到数组 B 中。我一开始是用了 immutability-helper 这么写的:

          setData(
              update(data, {
                [dragStatusIndex]: {
                  tasks: tasks =>
                    update(tasks, {
                      $splice: [[dragTaskIndex, 1]]
                    })
                },
                [hoverStatusIndex]: {
                  tasks: tasks =>
                    update(tasks, {
                      $splice: [[hoverTaskIndex, 0, dragCard]]
                    })
                }
              })
            )
    

    结果发现数组 A 的元素可能没清除掉,反而又复制了一个元素。我仔细想了想,这样一次性操作一个对象的两个地方真的是很奇怪的事情啊。
    所以呢,上面的代码应该改成:

            let tempData = update(data, {
              [dragStatusIndex]: {
                tasks: tasks =>
                  update(tasks, {
                    $splice: [[dragTaskIndex, 1]]
                  })
              }
            })
            tempData = update(tempData, {
              [hoverStatusIndex]: {
                tasks: tasks =>
                  update(tasks, {
                    $splice: [[hoverTaskIndex, 0, dragCard]]
                  })
              }
            })
    
            setData(
              tempData
            )
    

    不过下面这种写法来连续操作同一个数组是可以的:

                    update(tasks, {
                      $splice: [
                        [dragTaskIndex, 1],
                        [hoverTaskIndex, 0, dragCard]
                      ]
                    })
    

    至于为什么呢,我看到网上有个说法是多种操作不要一起使用,否则只会执行最后的一个操作

    就是这么个玩意坑了半天,调了半天还以为是拖拽组件出问题了呢。

    相关文章

      网友评论

          本文标题:使用 immutability-helper 的经验教训

          本文链接:https://www.haomeiwen.com/subject/izghcktx.html