FixedDataTable-无性能消耗百万级table

给你个眼神

写这篇文章的原因是,自己在遇到FixedDataTable时候,上网搜了一些文章,总没有尽人意的,或者都是英文版本,对阅读能力有要求.因此我做了对FDT的总结.

很多人可能还没有听过这个js插件,简单点,它就是一个table.那么它的强大之处在哪里?
我们先看看官网的解释:

A React table component designed to allow presenting millions of rows of data.

解读

这个插件是配合React的,它的主要优势是处理百万级数据,并且不卡顿非常流畅.并且它的滑动是不牺牲性能的.因此,一个项目追求的是完美,用户量大的时候,这个插件必定是你的左膀右臂.

你可以先看一下它的demo

demo地址
是吧,真的不卡顿且流程.并且偷偷告诉你,维护它的人是Schrödinger,Inc。是facebook公司的分支.

入门

fixed-data-table-2使用npm 安装。

npm install fixed-data-table-2

它的样式在

dist/fixed-data-table.css

主要的三种组件类型<Table/><Column/><Cell/>。

Table包含Column
Column包含Table
这里的Cell就是一个单元格.

<Table /> contains configuration information for the entire table

Table 包含了主要的配置信息.

  • rowHeight={50} //行高
  • rowsCount={100} //行数
  • width={5000} //table宽度
  • height={5050} //table的高度
  • headerHeight={50} //header的高度
  • data={rows}> //数据源

<Column />定义表中一列显示数据的方式

  • header = { < Cell > Col 1 < / Cell > } //列的标题
  • cell = { < Cell > Column 1 < / Cell > } //列内每一行的数据
  • width = { 2000 } //列的宽度

可以重写Cell组件

const MyCustomCell = ({ isSpecial }) =>
      <Cell>
        {isSpecial ? "I'm Special" : "I'm Not Special"}
      </Cell>;


    <Column
      header={<Cell>Col 3</Cell>} //列的名称
      cell={<MyCustomCell isSpecial/>} //相当于封装了Cell组件
      width={2000} //列的宽度
    />

如果你要开始一个React项目,我建议你使用facebook出的一款脚手架工具,
create-react-app.前提这个脚手架比较简单,网上也很多讲解.在里面使用fixed-data-table也是比较简单的.
引入:

import React from 'react';
import ReactDOM from 'react-dom';
import {Table, Column, Cell} from 'fixed-data-table-2';
import 'fixed-data-table-2/dist/fixed-data-table.css';

如果table的高度小于 rowHeight * rowsCount + headerHeight 时候,会自动出现滚动条.

上菜

基本介绍完了,如果你对文字理解不透彻,那么直接上菜吧.还等什么?

基本表格

demo1
render() { 
  const data = [ 
      {a : '9.1',b : 'bin1', c : '吃'},
      {a : '9.2',b : 'bin2', c : '喝'},
      {a : '9.3',b : 'bin3', c : '玩'},
    ];
return (
    <div> 
            <Table
            rowHeight={50}  //行高
            rowsCount={data.length} //行数
            width={500} //table宽度
            height={200} //table的高度s
            headerHeight={50} //header的高度
        >
          <Column 
            header = {<Cell>班级</Cell>}
            width = {100}
            cell = {({rowIndex,...props}) => (
              <Cell {...props}>
                {data[rowIndex]['a']}
              </Cell>
            )}
          >
          </Column>
          <Column 
            width = {100}
            header = {<Cell>姓名</Cell>}
             cell = {({rowIndex,...props}) => (
              <Cell {...props}>
                {data[rowIndex]['b']}
              </Cell>
            )}
          >
          </Column>
          <Column 
            width = {300}
            header = {<Cell>爱好</Cell>}
             cell = {({rowIndex,...props}) => (
              <Cell {...props}>
                {data[rowIndex]['c']}
              </Cell>
            )}
          >
          </Column>
        </Table>
    </div>
        )
    }

还有的功能:

固定列.

固定列

实现:只需要在对应的Column增加属性 fixed={true}
注意:将哪一列固定了,会自动排在第一列.假如我们给姓名的列增加了fixed,那么姓名就是第一列.

          <Column 
            fixed={true}
            header = {<Cell>班级</Cell>}
            width = {100}
            cell = {({rowIndex,...props}) => (
              <Cell {...props}>
                {data[rowIndex]['a']}
              </Cell>
            )}
          > 

如果想这样样式,需要用到ColumnGroup
引入:import {Table, Column, Cell,ColumnGroup} from 'fixed-data-table-2';
注意点: 需要在Table上设置:groupHeaderHeight,在Column外层包围:ColumnGroup


image.png
 <Table
            groupHeaderHeight={50}
            rowHeight={50}  //行高
            rowsCount={data.length} //行数
            width={400} //table宽度
            height={200} //table的高度s
            headerHeight={50} //header的高度
             {...this.props}
        >
       <ColumnGroup
          fixed={true}
          header={<Cell>Name</Cell>}>
          <Column 
            // fixed={true}
            header = {<Cell>班级</Cell>}
            width = {100}
            cell = {({rowIndex,...props}) => (
              <Cell {...props}>
                {data[rowIndex]['a']}
              </Cell>
            )}
          > 

          </Column>
          <Column
            width = {100} 
            header = {<Cell>姓名</Cell>}
             cell = {({rowIndex,...props}) => (
              <Cell {...props}>
                {data[rowIndex]['b']}
              </Cell>
            )}
          >
          </Column>
        </ColumnGroup >
        <ColumnGroup
                  fixed={true}
                  >
          <Column
            width = {300}
            header = {<Cell>爱好</Cell>}
             cell = {({rowIndex,...props}) => (
              <Cell {...props}>
                {data[rowIndex]['c']}
              </Cell>
            )}
          >
          </Column>
                  </ColumnGroup >
        </Table>

此刻,我想你已经开始上手了.自己开始思考挖掘吧~加油.

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,425评论 4 361
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,058评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,186评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,848评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,249评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,554评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,830评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,536评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,239评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,505评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,004评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,346评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,999评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,060评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,821评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,574评论 2 271
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,480评论 2 267

推荐阅读更多精彩内容

  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 13,629评论 1 92
  • (注1:如果有问题欢迎留言探讨,一起学习!转载请注明出处,喜欢可以点个赞哦!)(注2:更多内容请查看我的目录。) ...
    love丁酥酥阅读 4,051评论 2 5
  • SQL SELECT 语句 一、查询SQL SELECT 语法 (1)SELECT 列名称 FROM 表名称 (2...
    有钱且幸福阅读 5,333评论 0 33
  • 不要留恋过去的繁华 那些已成过眼云烟 寒风吹拂脸颊 吵醒了梦想 为了生计 还要面对现实
    练笔坊阅读 109评论 0 2
  • 远川zgc阅读 97评论 0 0