【问题标题】:React+redux, array of components. Ways to re-render only changed component from this array?React+redux,组件数组。重新渲染此数组中仅更改的组件的方法?
【发布时间】:2017-10-06 17:04:51
【问题描述】:

例如,在页面上我有许多组件,许多组件数组。 如果我调度一些动作,则包含所有这些组件数组的整个页面都会重新呈现。 但我不需要在页面上重新渲染未更改的项目/组件。 我只想重新渲染更改的组件。我知道有 shouldComponentUpdate() 。但是在每个组件中使用 shouldComponentUpdate 编写逻辑并不是那么酷。也许有一些图书馆,或者可能有一些替代方法?我听说过reactjs/reselect,对于此类问题是否正确,或者如果我误解了,请告诉 reselect 代表哪些问题?那么在使用功能组件的情况下呢?

也许还有其他一些库用于优化性能并控制允许重建的组件?

我还找到了 https://github.com/seatgeek/react-infinite https://github.com/bvaughn/react-virtualized 。这两个库是否出于相同目的?有什么区别?选哪个?

还有一个简单的问题,假设我正在获取数据,它正在添加到数组中。 如何在每次获取新项目时只渲染添加的项目,而不是整个数组?

【问题讨论】:

    标签: reactjs redux react-redux


    【解决方案1】:

    是的,你是对的。
    我建议您考虑重新选择。
    重新选择允许您记忆数据并仅选择应用程序某些部分正在使用的商店部分。
    使用选择器,如果您选择的商店部分发生更改,该库将导致您的 DOM 重新呈现;但是,即使您的商店的某些部分已更改但未连接到所需的数据,也不会。

    【讨论】:

    • 我还发现了github.com/seatgeek/react-infinite github.com/bvaughn/react-virtualized 对于同一个问题,它们会做同样的事情吗?什么是区别?
    • 我没有弄乱 react-virtualized 或 react-infinite,但从我的搜索来看,它们似乎是用于极其特定用例的库。 Reselect 是一个“选择器”库,主要用于 Redux 商店。这意味着您可以选择要记忆的数据的某些部分。不要引用我的话,但 react-virtualized 看起来只是一个专门的库,用于在需要时虚拟渲染某些部分的可视组件。
    • Redux 的工作原理是通过您的组件将您的商店(将其视为一个大数据对象)连接到您的应用程序。但是,每当 store 发生变化时,Reactjs 都会重新更新您的应用程序,这意味着您的应用程序的不必要部分会由于与数据更改完全无关的更新而重新呈现。重新选择用于通过“记忆”您的数据(存储)来解决这个问题。
    【解决方案2】:

    重新选择他的一个很棒的图书馆,这就是你所需要的。唯一的缺点是如果您在许多组件中使用选择器。您需要拥有每个选择器的实例才能将其设为私有。可以通过制作函数 makeMapStateToProps 来轻松完成,就像他们在此处显示的 https://github.com/reactjs/reselect#sharing-selectors-with-props-across-multiple-components 一样。但我不喜欢为我需要的每个选择器都做这个。所以我找到了这个库,它是最后一个 https://github.com/toomuchdesign/re-reselect 的扩展。这一个执行相同的选择器,但您可以使用一些键进行缓存。

    【讨论】:

    • react-virtualized 和 react-infinite 怎么样?
    猜你喜欢
    • 1970-01-01
    • 2018-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-22
    • 1970-01-01
    • 2023-03-28
    • 2017-06-17
    相关资源
    最近更新 更多