【发布时间】:2025-12-24 10:10:10
【问题描述】:
我一直在思考在我的应用中处理分组的最佳方式。这是一个视频编辑应用程序,我正在介绍对图层进行分组的功能。如果您熟悉 Figma 或任何设计/视频编辑程序,那么通常可以对图层进行分组。
为了在应用中保持简单,视频数据是一张地图
const map = {
"123": {
uid: "123",
top: 25,
type: "text"
},
"345": {
uid: "345",
top: 5,
type: "image"
},
"567": {
uid: "567",
top: 25,
type: "group"
children: ["345", "123"]
}
}
然后我将它们分组到一个渲染函数中(这感觉很昂贵)
const SomeComponent = () => {
const objects = useMemo(() => makeTrackObjects(map), [map]);
return (
<div>
{objects.map(object => {
return <div>Some layer that will change the data causing re-renders</div>
})}
</div>
)
}
这是进行分组的函数
const makeTrackObjects = (map) => {
// converts map to array
const objects = Object.keys(map).map((key: string) => ({ ...map[key] }));
// flat array of all objects to be grouped by their key/id
const objectsInGroup = objects
.filter((object) => object.type === "group")
.map((object) => object.children)
.flat();
// filter out objects that are nested/grouped
const filtered = objects.filter((object) => !objectsInGroup.includes(object.uid))
// insert objects as children during render
const grouped = filtered.map((object) => {
const children = object.children
? {
children: object.children
.map((o, i) => {
return {
...map[o]
};
})
.flat()
}
: {};
return {
...object,
...children
};
});
// the core data is flat but now nested for the UI. Is this inefficient?
return grouped
}
理想情况下,我希望数据保持平坦,我有很多代码需要更新才能深入数据。在某些需要的地方放平和变压器感觉很好。
主要问题是这是否有意义,是否有效,如果没有,为什么?
【问题讨论】:
-
一切都与性能有关,如果您的数据真的很大,那么所有在客户端进行分组和更改数据结构的操作都是一个糟糕的决定。理想情况下,在服务器上准备一个舒适的数据结构。否则,您将不得不牺牲性能来换取开发舒适度。
-
对所以最好不要在客户端改造
标签: javascript reactjs performance data-structures react-hooks