拓展机制介绍
pipeline 特点:
- 按需引入表格拓展,更好地支持 tree shaking
- 默认提供 多种拓展功能
- 支持 antd 或 fusion 组件库(二选一)
- 支持「受控用法」与「非受控用法」
- 支持「hooks 用法」与「非 hooks 用法」
- 支持 自定义的表格拓展
#
创建 pipeline#
hooks 用法在函数组件中,可以引入 hooks useTablePipeline
来创建 pipeline。
import { useTablePipeline, features, BaseTable } from 'ali-react-table'import { Checkbox } from '@alifd/next'// or... import { Checkbox } from 'antd'
function SomeFunctionComponent() { const pipeline = useTablePipeline({ components: { Checkbox } }) .input({ dataSource, columns }) .primaryKey('id') .use(features.sort(sortOptions)) .use(features.multiSelect(selectOptions))
// pipeline.getProps() 将生成以下 props // dataSource, columns, primaryKey, getRowProps // 使用时注意不要覆盖这些 props
return <BaseTable {...pipeline.getProps()} />}
创建 pipeline 时,要根据后续用到的表格拓展为 pipeline 提供 components。每个拓展所需求的组件可能不同,例如 行多选 需要 Checkbox 组件,行单选 则需要 Radio 组件。
创建之后,你可以使用 ali-react-table 提供的 拓展功能,或是 实现自定义的表格拓展。
warning
如果你想要使用自定义的 getRowProps
,要调用 pipeline.appendRowPropsGetter(getRowProps)
来将该方法添加加 pipeline 中。
如果对打包体积要求不高,可以采用下面的写法:
// 对于 fusion 用户...import * as fusion from '@alifd/next'useTablePipeline({ components: fusion })
// 对于 antd 用户...import * as antd from 'antd'useTablePipeline({ components: antd })
#
非 hooks 用法在类组件中,需要调用 new TablePipeline(...)
来创建 pipeline。创建时,通过 state / setState
为 pipeline 提供状态管理能力。
import * as fusion from '@alifd/next'import { TablePipeline, features } from 'ali-react-table'
class MyComponent extends React.Component { state = { pipelineState: {}, // pipelineState 的默认值必须为一个对象 }
setPipelineState = (updater) => { // this.setPipelineState 被调用时,第一个参数 updater 是一个函数 // updater 接受原来的 pipelineState,返回新的 pipelineState this.setState((prev) => ({ pipelineState: updater(prev.pipelineState), })) }
render() { const pipeline = new TablePipeline({ state: this.state.pipelineState, setState: this.setPipelineState, ctx: { components: fusion }, })
pipeline.input({ dataSource, columns }) pipeline.primaryKey('id') pipeline.use(features.autoRowSpan()) pipeline.use(features.someOtherFeature())
return <BaseTable {...pipeline.getProps()} /> }}
#
使用 pipelinetip
常规用法推荐直接参考 具体拓展功能 中的示例。
创建 pipeline 之后,一般需要先设置 input 和 primaryKey,然后可以使用各个表格拓展。
pipeline.input({ dataSource, columns })
#
input 方法用于设置 pipeline 的输入,调用后 pipeline 中当前的 dataSource/columns 将被更新。该方法会返回 pipeline 对象,方便链式调用。
pipeline.primaryKey(primaryKey)
#
设置 primaryKey。primaryKey 一般是一个字符串,例如 'id'
,表示数据中的 id 字段可以唯一确定一行。primaryKey 也可以是一个函数,详情可参考 BaseTable api。很多表格拓展功会要求 primaryKey
预先被设置,部分拓展还要求 primaryKey
必须为一个字符串。该方法会返回 pipeline 对象,方便链式调用。
pipeline.use(someTableFeature)
#
使用指定的表格功能拓展。该方法会返回 pipeline 对象,方便链式调用。
pipeline.getProps()
#
获取 <BaseTable />
的 props,返回结果会包含 { dataSource, columns, primaryKey, getRowProps }
这四个字段。
以上 4 个 API 可以满足大部分的日常使用,如果你想对 pipeline 中的数据进行加工,详见 实现自定义的表格拓展。