题外话,昨天写 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]
]
})
至于为什么呢,我看到网上有个说法是多种操作不要一起使用,否则只会执行最后的一个操作
。
就是这么个玩意坑了半天,调了半天还以为是拖拽组件出问题了呢。
网友评论