当React/Flux中有几个小的、可重复的子组件时,如何管理组件渲染
How to manage component rendering when there are several small, repeatable sub-components in React/Flux
让React组件监听中央存储库的更新的Flux模式很棒,但是当你在同一个页面上有许多小的、可组合的部件需要从一个存储库重新呈现时,似乎会出现一个问题。乍一看,开发人员似乎需要在两种选择之间进行权衡:创建一个父组件来管理这些较小的、可重复的组件的状态和呈现责任,而不是让每个组件管理自己的资源,但保持大量事件处理程序打开(每个重复组件一个)。
为了说明,我现有的结构看起来像这样:- 我有一个
EventList
组件,其中包含一个Event
组件列表(可能有数百个)作为子组件渲染。 -
Event
组件在渲染时包含AuthenticatedImage
作为子组件。 -
AuthenticatedImage
组件监听TokenStore
上的变化,并在更新发生时重新渲染(一个新的令牌,用那个令牌重新渲染)。
TokenStore
很少更新,但是当这种情况发生时,我们绝对希望重新渲染所有AuthenticatedImage
组件。
这是一个困境:如果我让每个AuthenticatedImage
侦听对TokenStore
的更改,Javascript开始抱怨我们对同一个事件有大量开放的事件处理程序(也就是说,可能有数百个组件都侦听同一个事件)。相比之下,我可以让父EventList
组件侦听TokenStore
的更新,但随后EventList
开始拥有AuthenticatedImage
的责任,并且AuthenticatedImage
失去其可移植性。
考虑到这些想法,在确保代码保持干净和可移植的同时,如何确保在存储更改时重新呈现组件的许多实例,而不消耗过多的内存和激怒Javascript之神?
在流体思维中,听起来你的AuthenticatedImage
应该是一个纯组件=没有状态(也没有监听器),只响应从父传递下来的道具。通常建议尽量将状态保持在组件层次结构的最上层。
如果只有一个图像需要响应新的令牌,那么在组件中并在其状态下进行令牌提取是有意义的。但据我所知并非如此。
通过集中令牌获取,AuthenticatedImage
仍然是非常可移植的。它只是失去了获取令牌的责任,但这可能是一个好主意:显然有许多组件需要相同的令牌,因此集中令牌获取是一个合乎逻辑的步骤。特别是当AuthenticatedImage
以外的组件响应令牌时。
它还使您的数据存储和组件对齐:令牌的集中存储=令牌的集中获取。如果您还将每个令牌分别存储在每个图像实例中,则将其放在AuthenticatedImage
组件中是有意义的。
您得到的结果是,记号获取逻辑中的任何更改只需要处理一次,而不是在使用记号的每个组件类中处理。
- React重新渲染但未显示正确的组件
- 不能从angular2中的子组件指定父组件中的数组
- 拨打'父亲'函数形式a'儿童'ReactJS中的组件
- 如何在elfinder插件(一个文件管理器插件)上获得上传前事件
- 如何访问声音管理器2创建的声音对象
- React组件等待所需道具进行渲染
- 如何创建带有插槽的vue js组件预加载程序
- KnockoutJS-组件-多个实例
- JS编译器/包管理器,用于版本控制
- Firebase2(Firebase.google.com)推送通知-从外部管理
- 在 React/Redux 中管理同级组件之间的滚动状态
- 如何在reactjs中管理树组件中的状态
- React.js:管理状态和组件重新提交
- 管理web组件的依赖关系;JS、CSS/SASS和模板文件
- 如何管理独立反应组件之间的通信
- 在尝试管理和访问不同组件和处理程序方法中的状态时,我可以使用RxJS与Redux/context吗
- 当React/Flux中有几个小的、可重复的子组件时,如何管理组件渲染
- 如何在Redux表单中为同一父窗体的多个窗体子组件管理多个# onsubmit ?
- 为了管理自己的mapDispatchToProps,子组件应该在什么级别上拥有自己的容器(逻辑反应-还原's连接
- 如何在不使用组件时使用浏览器化管理依赖项