antd-design源码学习系列-Table
table展示是经常要使用的数据展示,这边看一下源码实现。
antd 实现效果如下:
第一层 InternalTable:
return ( <div ref={ref} className={wrapperClassNames} style={style}> // wrapperClassNames 是className 以及classNames()调用之后的className,style是传入的样式style <Spin spinning={false} {...spinProps}> {topPaginationNode} <RcTable<RecordType> {...tableProps} columns={mergedColumns as RcTableProps<RecordType>['columns']} // 对于传入的columns进行处理mergedColumns direction={direction} expandable={mergedExpandable} prefixCls={prefixCls} className={classNames({ [`${prefixCls}-middle`]: mergedSize === 'middle', [`${prefixCls}-small`]: mergedSize === 'small', [`${prefixCls}-bordered`]: bordered, [`${prefixCls}-empty`]: rawData.length === 0, })} data={pageData} // pageData是对传入的dataSource进行处理, //{ //const rawData: readonly RecordType[] = dataSource || //EMPTY_LIST; //const sortedData = React.useMemo( // () => getSortData(rawData, sortStates, //childrenColumnName), //[rawData, sortStates], //) //const mergedData = getFilterData(sortedData, filterStates); //} rowKey={getRowKey} rowClassName={internalRowClassName} emptyText={(locale && locale.emptyText) || renderEmpty('Table')} // Internal internalHooks={INTERNAL_HOOKS} internalRefs={internalRefs as any} transformColumns={transformColumns as RcTableProps<RecordType>['transformColumns']} /> {bottomPaginationNode} </Spin> </div> );
其中 {topPaginationNode} 是底部的pagination
topPaginationNode = renderPagination(topPos!.toLowerCase().replace('top', '')); const renderPagination = (position: string) => ( <Pagination {...mergedPagination} className={classNames( `${prefixCls}-pagination ${prefixCls}-pagination-${position}`, mergedPagination.className, )} size={paginationSize} /> );
<RcPagination {...getIconsProps()} // 底部按钮配置 {...restProps} prefixCls={prefixCls} selectPrefixCls={selectPrefixCls} className={extendedClassName} selectComponentClass={selectComponentClass || (isSmall ? MiniSelect : MiddleSelect)} locale={locale} /> );
最内部是RcTable, 其实就是https://www.npmjs.com/package/rc-table的Table
相关api参考 以上链接的api
本质上就是对于RcTable的高阶封装
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!