树结构和React / Redux中的shouldComponentUpdate的性能问题

帕迪·曼

我对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>,而不是仅在顶层进行连接。我今天晚上要测试。

还有阿布拉莫夫

刚刚添加了一个新的示例来说明这一点。
您可以这样运行它:

git clone https://github.com/rackt/redux.git

cd redux/examples/tree-view
npm install
npm start

open http://localhost:3000/

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

树结构中的递归和

来自分类Dev

在树结构中存在无限深度的问题

来自分类Dev

邻接表中的树结构

来自分类Dev

Lisp中树结构的定义

来自分类Dev

不同表中的树结构

来自分类Dev

列出cakephp中的树结构

来自分类Dev

Lisp中树结构的定义

来自分类Dev

更新Clojure中的层次结构/树结构

来自分类Dev

Python树结构字典创建问题

来自分类Dev

React、Redux 和three.js 的性能问题

来自分类Dev

在树结构.txt文件中搜索节点

来自分类Dev

在SwiftUI中为树结构更新UI

来自分类Dev

在javascript中打印分层树结构

来自分类Dev

树结构中的读取访问冲突

来自分类Dev

如何在Antlr中禁用树结构?

来自分类Dev

使用缓存计算树结构中的总和

来自分类Dev

Oracle中sql中的树结构。如何在SQL Oracle中显示树,子节点和父节点

来自分类Dev

React react-redux redux-persist性能问题

来自分类Dev

遍历树结构和动作

来自分类Dev

结合Reducers和react-redux中的良好结构

来自分类Dev

如何在Tabulator中过滤树结构中的子级?

来自分类Dev

LINQ中的性能和概念问题

来自分类Dev

在Scala Play框架中阅读JSON树结构

来自分类Dev

从PostgreSQL中的表中提取网络/树结构

来自分类Dev

在Neo4j中创建树结构

来自分类Dev

通过树结构中的ID属性查找实例

来自分类Dev

树结构中的运行时元素替换

来自分类Dev

在neo4j中创建嵌套树结构

来自分类Dev

在Scala Play框架中阅读JSON树结构