我对React,Redux和ImmutableJS还是相当陌生,并且遇到了一些性能问题。
我有一个大的数据树结构,目前正在以平面列表形式存储该数据:
new Map({
1: new Node({
id: 1,
text: 'Root',
children: [2,3]
}),
2: new Node({
id: 2,
text: 'Child 1',
children: [4]
}),
3: new Node({
id: 3,
text: 'Child 2',
children: []
}),
4: new Node({
id: 4,
text: 'Child of child 1',
children: []
})
});
虽然将其构造为平面列表使更新节点变得容易,但我发现随着树的增长,交互变得缓慢。交互包括能够选择一个或多个节点,切换其子节点的可见性,更新文本等等。UI缓慢的主要原因似乎是每次交互都重绘了整个树。
我想这样使用shouldComponentUpdate
,如果我更新节点3,则节点2和4不会更新。如果数据以树的形式存储(我可以简单地检查是否为this.props !== nextProps
),这将很容易,但是由于数据存储在平面列表中,因此检查将更加复杂。
我应该如何存储数据并使用shouldComponentUpdate
(或其他方法)支持具有数百或数千个树节点的平滑UI?
编辑
我一直在顶层连接商店,然后必须将整个商店传递给子组件。
我的结构是:
<NodeTree>
<NodeBranch>
<Node>{{text}}</Node>
<NodeTree>...</NodeTree>
</NodeBranch>
<NodeBranch>
<Node>{{text}}</Node>
<NodeTree>...</NodeTree>
</NodeBranch>
...
</NodeTree>
该<Node>
可以做一个简单的检查以shouldComponentUpdate
查看是否标题已经改变,但我没有类似的解决方案,以使用上<NodeTree>
或<NodeBranch>
给出树的递归特性。
看起来最好的解决方案(感谢@Dan Abramov)将是连接每个<NodeBranch>
,而不是仅在顶层进行连接。我今天晚上要测试。
问题内容: 我读到React非常快。最近,我写了一个应用程序来测试对角的反应。不幸的是,我发现反应的表现要慢于角度反应。 http://shojib.github.io/ngJS/#/speedtest/react/1 这是react的源代码。我是新来的人。我确定我的反应代码在这里做错了。我发现它异常缓慢。 https://jsbin.com/viviva/edit?js,输出 看看是否有任何反应
问题内容: 我有一个关于React的问题(未覆盖时)。我确实更喜欢纯功能组件,但是即使prop / state不变,我也担心它每次都会更新。所以我正在考虑使用PureComponent类。 我的问题是:功能组件是否与PureComponents 具有相同的检查?还是每次都会更新? 问题答案: 在React中,功能组件是无状态的,并且它们没有生命周期方法。 无状态组件是一种编写React组件的优雅方
问题内容: 我正在尝试在GORM中定义树结构。这是我的模型: 插入似乎可以正常工作,但是当我无法加载具有多个级别和子级别的Tree时。我想我在关系中错过了一些东西:-树应该引用rootLevel(以及可选地引用所有子级别)-一个级别应该引用其父级别,其子级别和全局父树 您能指出我正确的方向以获得这样的树结构吗?谢谢 问题答案: 我最终得到了这个解决方案(感谢朋友): 和 我错过了Tree和Leve
本文向大家介绍数据结构中的R *树,包括了数据结构中的R *树的使用技巧和注意事项,需要的朋友参考一下 基本概念 在数据处理的情况下,R *树被定义为为索引空间信息而实现的R树的变体。 R *树比标准R树的建造成本稍高,因为可能需要重新插入数据。但是生成的树通常具有更好的查询性能。与标准R树相同,它可以存储点和空间数据。R *树的概念由Norbert Beckmann,Hans-Peter Kri
NowCoder 题目描述 解题思路 // java public boolean HasSubtree(TreeNode root1, TreeNode root2) { if (root1 == null || root2 == null) return false; return isSubtreeWithRoot(root1, root2) || HasSu