import { Table } from 'antd';
const columns = [
{ title: 'Name', dataIndex: 'name', key: 'name' },
{ title: 'Age', dataIndex: 'age', key: 'age' },
{ title: 'Address', dataIndex: 'address', key: 'address' },
{ title: 'Action', dataIndex: '', key: 'x', render: () => <a href="#">Delete</a> },
];
const data = [
{ key: 1, name: 'John Brown', age: 32, address: 'New York No. 1 Lake Park', description: 'My name is John Brown, I am 32 years old, living in New York No. 1 Lake Park.' },
{ key: 2, name: 'Jim Green', age: 42, address: 'London No. 1 Lake Park', description: 'My name is Jim Green, I am 42 years old, living in London No. 1 Lake Park.' },
{ key: 3, name: 'Joe Black', age: 32, address: 'Sidney No. 1 Lake Park', description: 'My name is Joe Black, I am 32 years old, living in Sidney No. 1 Lake Park.' },
];
ReactDOM.render(
<Table
columns={columns}
expandedRowRender={record => <p style={{ margin: 0 }}>{record.description}</p>}
dataSource={data}
/>
, mountNode);
刚开始没看明白,以为讲的是业务组件的事情。去搜了文章看才明白怎么回事。
文章来自知乎,题主以后类似问题可以在题目中注明
https://zhuanlan.zhihu.com/p/...
这篇文章讲的是组件库的设计,全文有一个很明确的观点,即组件库应该给使用者足够高的自由度,以避免组件与外部的耦合,提高组件的灵活性。红圈这里的回调并不是指一般意义上的请求或者事件的回调函数,而是指组件渲染的回调函数,通常组件提供这类回调时为了让使用者声明组件具体的渲染方式,以及数据的处理逻辑。
有一个很好的例子是
antd
的Table
组件,该组件提供了一个展开单行表格的功能。这里展开的内容就是通过回调函数来声明的。回调函数提供每一行的数据(即红圈处整个对象),由使用者负责处理数据,并返回一个DOM
结构。组件在实际渲染时,会循环调用这个回调函数,将返回的DOM结构作为展开行的实际内容渲染。如此一来,
antd
并不关心你传入数据的结构或者属性名,因此实现了和后端,也就是数据源的解耦可展开的组件