【发布时间】:2015-08-25 13:02:17
【问题描述】:
场景:我想扩展现有的 React 组件并将其作为独立组件交付。
我们以 Facebook 的 FixedDataTable (https://github.com/facebook/fixed-data-table) 为例,添加一些额外的功能并将其包装为可重用的组件。
第一个额外功能是“多行选择” - 可以在此处找到演示 http://goo.gl/qRE9eB
这里任何人都可以注意到MovieTable 包装器处理行的检查/未检查状态。因此,我接下来要做的是将状态处理的责任委托给 Flux 存储(为简单起见,让我们考虑 Facebook Flux 实现 https://github.com/facebook/flux)。现在这样做可能没有太大意义,但随着MovieTable 的复杂性增加(排序、无限滚动等),集成 Flux 将是必要的。根据 Flux 架构(Action -> Dispatcher -> Store -> View),_onRowClick 和 _onCheckAll 将触发允许 Store 保存状态并通知视图发生更改的操作,以便视图重新渲染复选框的新状态。
接下来假设我想将MovieTable 视图与其操作/调度程序/存储捆绑在一起作为一个独立的组件,以便我以后可以重新使用它。第一个问题:
1) 将视图/操作/调度程序/存储作为独立组件捆绑在一起是否有意义?从我的角度来看,好处很明显:使用组件的人不需要照顾组件的“内部”(例如行选择、无限滚动、排序等)
让我们考虑一下我选择将所有内容捆绑在一起。接下来的问题是:
2) 如何从商店中获取数据?例如应用程序的某些部分可能需要从组件的 Store 中获取所有选定的行
3) 如何在组件的调度程序上触发操作?例如我想以编程方式检查一些行 - 我的第一个想法是客户端应该有权访问组件的操作
4) 鉴于 1)、2) 和 3),我想要一个可重用的 DataTable 组件,它“感觉”像传统的 jQuery 组件(例如 jqGrid http://goo.gl/b7jPo3)。最终目标是将类似 jQuery 的组件与 React 组件结合在同一个页面中,而不会对混合这些组件造成太大的痛苦。
【问题讨论】:
标签: jquery facebook components reactjs flux