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的高阶封装

 

posted @   千亿昔  阅读(1074)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
点击右上角即可分享
微信分享提示