React:重新排序列表导致不需要的转换

React: Reorder list causes unwanted transitions

我有一个用 React 实现的列表,可以通过几个按钮上下移动来重新排序。

我遇到的问题是因为我有一个使用 CSS 实现的 Toggle 组件并且在状态之间有转换,当我更改具有不同切换状态的两行之间的顺序时,我看到我只想看到的过渡,然后单击切换按钮,而不是在重新排序时看到。

为了更好的解释,这里是问题的 gif。

我理解这就是 React 的工作方式,它只是渲染和改变差异,这就是为什么它只是改变属性,这就是我看到过渡发生的方式。

我的问题是,有没有办法避免这种情况?

编辑: 解决方案是正确的。虽然我使用的是 key 属性,但它的值是数组的索引。这让 React 感到困惑,无法确定正确的元素。

确保为列表中的每个元素设置 key 属性。

这将使 React 能够重用现有的 DOM 元素,而不是重新渲染它们,这应该可以解决您的问题。它还应该提高流程中的性能。


[...] React supports a key attribute. When children have keys, React uses the key to match children in the original tree with children in the subsequent tree.

Source