【发布时间】:2018-05-09 06:30:45
【问题描述】:
我正在寻求有关在 react 中构建实体数据表组件的帮助。
我正在使用 react-virtualized 并试图确定如何封装用于服务器端排序/过滤/分页/行删除/等的样板功能。
我从一个简单的、自包含的组件开始,它只需要一个 API 路径,并通过本地状态自行处理所有事情。
为了能够从表格组件外部更新/删除/添加/刷新记录,我将表格状态/逻辑移动到管理表格的容器组件中,以及一些按钮和模式窗口。
但是,既然所有用于排序/过滤/分页的处理程序都在这个容器中,似乎它们都必须被复制才能重新用于其他要求略有不同但排序/过滤完全相同的表/分页。
如何在表格组件中包含样板表格逻辑,同时还能从组件外部更新/删除/添加/刷新记录?
为了形象化,这里有一个人为的例子,所有的逻辑和状态都封装在 TableWithFilter 组件中:
<SomeEntityList>
<TableWithFilter apiPath={this.props.apiPath}>
<FilterBar />
<Table />
<TableWithFilter>
</SomeEntityList>
过滤方法和状态可以存在于 TableWithFilter 中:
TableWithFilter._handleFilter() {
// get filter, inject filter into api path, get records, update state
}
现在,假设我们需要添加一个模式,以便我们可以连续编辑值:
<SomeEntityList>
<EditRowModal />
<TableWithFilter>
<FilterBar />
<Table />
<TableWithFilter>
</SomeEntityList>
然后必须将状态和过滤方法上移到 SomeEntityList 组件,以便模态可以更改表中的记录:
SomeEntityList._handleFilter() {
//get filter, inject filter into api path, get records, update state
}
SomeEntityList._editRow() {
// make update call, update state
}
假设我将有几十个不同的 SomeEntityListA/SomeEntityListB/SomeEntityListC(有些有编辑记录模式,有些有添加新记录的按钮等),我将如何避免在几十个地方重复过滤逻辑?
【问题讨论】:
-
等等,为什么不将过滤器作为参数传递给
<TableWithFilter />或实际使用过滤器的任何元素?'
标签: javascript reactjs datatable