我想重新实现一个树组件来提高它的性能。我使用了 react-window 中的 FixedSizeList。它的工作相对较好。它甚至可以处理 100,000 个树节点。
我的问题是,我想为树节点的小开口三角形设置动画。以下css负责动画:
.tree-branch::after {
content: '';
display: block;
width: 0;
height: 0;
margin-top: 1px;
margin-left: 23px;
border-top: 6px solid transparent;
border-bottom: 6px solid transparent;
border-left: 6px solid rgba(0, 0, 0, 0.7);
opacity: 0.7;
position: absolute;
top: 0;
left: -36px;
transform: rotate(90deg);
animation-duration: 0.3s;
}
.tree-item-closed::after {
transform: rotate(0deg);
}
动画不起作用。因为在每次打开和关闭时所有的列表元素 div 都会重新渲染。然后我尝试为列表添加 itemKey 属性以帮助 React 重用 div。
<List
className="List"
height={height}
itemCount={flattenedData.length}
itemSize={32}
width={width}
itemKey={index => flattenedData[index].id} // key defined
>
{Row}
</List>
它也不起作用。div 不会更新,而是重新渲染整个 div。这个问题有合适的解决方案吗?如何防止重新渲染?
这是整个示例:https ://codesandbox.io/s/a-quick-react-tree-component-based-on-react-window-tyxnm