【问题标题】:Is it detrimental to performance to reference all of an entity type in mapStateToProps?在 mapStateToProps 中引用所有实体类型是否对性能有害?
【发布时间】:2019-06-22 03:21:06
【问题描述】:

我一直在使用 React、Redux 和 Normalizr 构建一个相当广泛的应用程序,但一直在为过多的冗余渲染周期而苦苦挣扎,现在我想我可能误解了如何结合 mapStateToProps 和 Normalizr。

在我的mapStateToProps 中,我引用了所有特定的实体类型,然后我可以使用它从其 ID 中获取实体:

function mapStateToProps(state) {
    return {
        allMilestones: state.account.entities.milestones,
        allTasks: state.account.entities.tasks,
    }
}

使用上面的mapStateToProps,每当我需要获取实体时,我就可以去(例如)const taskObject = this.props.allTasks[taskId]。快速方便,但我知道这意味着有很多道具被传递——我认为传递引用没什么大不了的,但后来我注意到一切都在重新渲染,一直。

这是否可能是渲染周期数量不合理的罪魁祸首?

如果是这样,我是否可以期望对所有这些情况实施 Reselect 会对性能产生积极影响?

【问题讨论】:

    标签: reactjs redux react-redux normalization normalizr


    【解决方案1】:

    这是可能的,但这是没有基准的猜测(在进行任何优化之前,您应该尝试自己澄清这一点)。 React-Redux 将对从 mapStateToProps 返回的对象的所有键进行比较,如果有任何不同,将重新呈现。

    如果每次引用都发生变化 - 例如,因为您使用的是不可变 Map - 那么组件将在任何时候重新渲染 mapStateToProps()

    您应该尝试通过只返回连接组件所需的内容来使返回值更稳定。

    https://react-redux.js.org/using-react-redux/connect-mapstate#return-values-determine-if-your-component-re-renders

    【讨论】:

      猜你喜欢
      • 2013-07-26
      • 2012-11-24
      • 2023-03-16
      • 2014-08-18
      • 2012-04-07
      • 2011-10-24
      • 1970-01-01
      • 1970-01-01
      • 2011-06-11
      相关资源
      最近更新 更多