首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >构建React/Redux应用程序以提高效率

构建React/Redux应用程序以提高效率
EN

Stack Overflow用户
提问于 2016-10-28 13:54:14
回答 2查看 71关注 0票数 2

我正在构建一个音频工作站应用程序,将显示包含剪辑的曲目表。现在,我有一个表缩减器,它返回一个表对象。表对象包含轨迹对象,而轨迹对象包含剪辑对象。我有一个订阅表存储的TableContainer。我的问题是,我认为我的应用程序效率会很低,因为每次添加或操作剪辑时,它都会重新渲染页面。实际上,只有剪辑所在的特定轨道需要重新渲染,对吗?我如何构建我的应用程序,而不是每一个小的更改都会重新呈现整个应用程序?

EN

回答 2

Stack Overflow用户

发布于 2016-10-28 18:33:32

在任何组件的mapStateToProps中,不要选择作为一个整体的父对象发送到组件。如果可能,选择特定的属性,一直到叶值。如果您的TableContainerrender()本身不使用tracks数组,那么它们要确保只传递您使用的兄弟属性。

因此,不是:

代码语言:javascript
复制
function mapStateToProps(state, props) {
  return {
    table: state.tables[props.tableId];
  }
}

执行以下操作:

代码语言:javascript
复制
function mapStateToProps(state, props) {
  let table = state.tables[props.tableId];
  return {
    name: table.name, 
    type: table.type
  };

这使得React Redux在确定您的组件是否需要重新渲染时更具鉴别力。它将看到,尽管table由于clip更改而更改,但nametype都没有更改。

但是,由于您的Table组件可能也呈现Track组件,因此您可能无法避免呈现调用。如果树上的任何属性被更改,tracks数组也会被更改。

这种情况下的解决方案是让tracks数组不包含整个track对象,而只包含一个轨迹is列表。然后,您可以将曲目存储在表的旁边,其中一个的更改不会影响另一个。请注意,只有当您不去获取并传递Table组件的mapStateToProps中的track对象时,这才起作用。您应该使Track组件接受其ID而不是实际对象作为道具。这样,Table组件就完全不依赖于曲目的内容了。

票数 2
EN

Stack Overflow用户

发布于 2016-10-28 14:44:13

react的强大功能是只重新呈现需要的内容(通过使用虚拟DOM进行比较和shouldComponentUpdate函数)。

在它成为性能问题之前,我不会过多地研究它。

如果是这样,我会将曲目存储在一个单独的目录中,而不会将其传递给app (main)组件。在你的Clip组件的mapStateToProps函数中(如果你使用react-redux),从状态获取轨迹,因为你从道具中获得了它的名称。这样,如果磁道变化很大(例如,因为异步获取切片),则只会更新组件。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40298869

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档