在React中使用表,第二部分

总览

这是关于React-Bootstrap-Table的两部分系列的第二部分。 在第一部分中,我们使用react-create-app创建了一个简单的React应用程序,添加了React-Bootstrap-Table,用数据填充了表,使用了列,设置了表的样式,并选择了行。

在本部分中,我们将通过扩展行,添加行,删除行并涵盖分页,单元格编辑和高级自定义来继续这一过程。

扩大行

这是React-bootstrap-table的最酷的功能之一。 显示表格数据时,通常可能需要在一两行中看到其他数据,但不能显示所有行的所有数据。

一种解决方法是显示工具提示,但是工具提示要求您将鼠标悬停在目标区域上,并且一次只能看到一个工具提示。 扩展行使您可以在一种抽屉中显示每行的其他数据,并根据需要保持扩展状态,完成后可以将其折叠回去。 您可以同时扩展任意多的行。 这是使用React-bootstrap-table完成的。

爱情地图包含一些被捕的开发人物之间的关系:哥布喜欢玛塔,巴斯特喜欢露西尔2。isExpandable()函数控制哪些行是可扩展的。 在这种情况下,对于字符名称在爱情地图中的行,它返回true。 当一行被展开时, expandRow()函数返回一个组件。

返回的组件显示在该行下方,直到该行折叠为止。 配置行扩展有些棘手。 有些选项只是BootstrapTable组件上的道具。

扩展列选项是一个对象属性,然后有一个名为options的属性 ,其中包含其他行扩展选项,例如expandRowBgColorExpanding 。 如果只有一个名为expandRowProp的道具包含所有选项(例如selectRowProp ),它将更加简单。

import React, {Component} from 'react'
import {BootstrapTable, TableHeaderColumn} 
       from 'react-bootstrap-table'
import '../css/Table.css'
import '../dist/react-bootstrap-table-all.min.css'


const loveMap = {
  Gob: 'Martha',
  Buster: 'Lucile 2',
}


function isExpandableRow(row) {
  return row['name'] in loveMap;
}

function expandRow(row) {
  return (
    <p>{row['name']} loves {loveMap[row['name']]}.</p>
  );
}


class Table5 extends Component {
  render() {
    const options = {
      expandRowBgColor: 'pink',
      expanding: [1] // initially expanded
    }
    return (
      <div>
        <BootstrapTable data={this.props.data}
                        expandableRow={isExpandableRow}
                        expandComponent={expandRow}
                        expandColumnOptions={ 
                            {expandColumnVisible: true}}
                        options={options}
        >
          <TableHeaderColumn isKey dataField='id'
          >
            ID
          </TableHeaderColumn>
          <TableHeaderColumn dataField='name'
          >
            Name
          </TableHeaderColumn>
          <TableHeaderColumn dataField='value'
          >
            Value
          </TableHeaderColumn>
        </BootstrapTable>
      </div>
    )
  }
}

export default Table5
上面代码的结果

分页

到目前为止,我们只显示了三行数据。 表格旨在显示很多不一定同时显示在屏幕上的数据。 那就是分页的地方。React-bootstrap-table支持许多分页选项。

让我们用100个项目填充表格,这将是十个页面,每个页面十个项目。 我们将使用getData()函数,该函数返回一个包含100个对象的数组,这些对象具有基于其索引的ID,名称和值。

我们还指定最初要显示的页面(4),为上一页,下一页,第一页和最后一页自定义文本(使用Unicode箭头以保持冷静),最后提供一个名为showTotal()的自定义函数来显示项目总数。 请注意,用于控制上一页按钮的属性称为“ prePage”,而不是“ prevPage”(让我知道)。 所有分页选项都进入表的常规“选项”属性。

import React, {Component} from 'react'
import {BootstrapTable, TableHeaderColumn} 
        from 'react-bootstrap-table'
import '../css/Table.css'
import '../dist/react-bootstrap-table-all.min.css'


function getData() {
  var data = []
  for (var i = 0; i < 100; ++i) {
    data[i] = {id: i, name: 'item_' + i, value: i}
  }

  return data
}


function showTotal() {
  return <p>There are 100 items total</p>
}


class Table6 extends Component {
  render() {
    const options = {
      page: 4,
      prePage:  '⟵',
      nextPage: '⟶',
      firstPage: '⟸',
      lastPage: '⟹',
      paginationShowsTotal: showTotal
    }
    return (
      <div>
        <BootstrapTable data={getData()}
                        pagination={true}
                        options={options}
        >
          <TableHeaderColumn isKey dataField='id'
          >
            ID
          </TableHeaderColumn>
          <TableHeaderColumn dataField='name'
          >
            Name
          </TableHeaderColumn>
          <TableHeaderColumn dataField='value'
          >
            Value
          </TableHeaderColumn>
        </BootstrapTable>
      </div>
    )
  }
}

export default Table6
上面代码的结果表

添加和删​​除行

到目前为止,我们已经使用表格以多种方式显示信息。 但是表可以用作操作数据的用户界面。 让我们看看如何在表中添加和删除行。

关键属性是insertRowdeleteRow 。 指定它们时,将添加“新建”和“删除”按钮。 如果单击“新建”按钮,将打开一个模式对话框,让您添加新行。 如果单击“删除”按钮,将删除所有选定的行。 当然,要删除行,您必须启用行选择。 您还可以附加在添加或删除行之后调用的挂钩函数。

import React, {Component} from 'react'
import {BootstrapTable, TableHeaderColumn} 
        from 'react-bootstrap-table'
import '../css/Table.css'
import '../dist/react-bootstrap-table-all.min.css'


function onInsertRow(row) {
  let newRowStr = ''

  for (const prop in row) {
    newRowStr += prop + ': ' + row[prop] + ' \n'
  }
  alert('You inserted:\n ' + newRowStr)
}


function onDeleteRow(rowKeys) {
  alert('You deleted: ' + rowKeys)
}

class Table7 extends Component {
  render() {
    const options = {
      afterInsertRow: onInsertRow,
      afterDeleteRow: onDeleteRow
    }

    // To delete rows you be able to select rows
    const selectRowProp = {
      mode: 'checkbox'
    }

    return (
      <div>
        <BootstrapTable data={this.props.data}
                        insertRow={true}
                        deleteRow={true}
                        selectRow={selectRowProp}
                        options={options}
        >
          <TableHeaderColumn isKey dataField='id'
          >
            ID
          </TableHeaderColumn>
          <TableHeaderColumn dataField='name'
          >
            Name
          </TableHeaderColumn>
          <TableHeaderColumn dataField='value'
          >
            Value
          </TableHeaderColumn>
        </BootstrapTable>
      </div>
    )
  }
}

export default Table7
添加和删​​除行

单元格编辑

数据处理的另一种形式是就地编辑(也称为单元格编辑)。 单击或双击可触发单元格编辑。 单元格编辑由“ cellEdit”属性控制。 除了模式外,您还可以指定不可编辑的行和挂钩函数。

在下面的代码中, nonEditableRows函数仅返回行键3,但可以使用更复杂的逻辑。

import React, {Component} from 'react'
import {BootstrapTable, TableHeaderColumn} 
        from 'react-bootstrap-table'
import '../css/Table.css'
import '../dist/react-bootstrap-table-all.min.css'


class Table8 extends Component {
  render() {
    const cellEditProp = {
      mode: 'click', // 'dbclick' for trigger by double-click
      nonEditableRows: function() {
        return [3];
      }
    }
    return (
      <div>
        <BootstrapTable data={this.props.data}
                        cellEdit={cellEditProp}
        >
          <TableHeaderColumn isKey dataField='id'
          >
            ID
          </TableHeaderColumn>
          <TableHeaderColumn dataField='name'
          >
            Name
          </TableHeaderColumn>
          <TableHeaderColumn dataField='value'
          >
            Value
          </TableHeaderColumn>
        </BootstrapTable>
      </div>
    )
  }
}

export default Table8
编辑单元格

导出数据

有时,仅在Web UI中查看并使用数据是不够的,您需要获取数据并将其提供给其他工具。 使用React-bootstrap-table的方法非常简单。 您只需添加exportCSV属性(还可以添加文件名),然后添加导出按钮。 当您单击按钮时,它允许您将数据保存到CSV文件。

import React, {Component} from 'react'
import {BootstrapTable, TableHeaderColumn} 
        from 'react-bootstrap-table'
import '../css/Table.css'
import '../dist/react-bootstrap-table-all.min.css'


class Table9 extends Component {
  render() {
    return (
      <div>
        <BootstrapTable data={this.props.data}
                        exportCSV
                        csvFileName='data.csv'
        >
          <TableHeaderColumn isKey dataField='id'
          >
            ID
          </TableHeaderColumn>
          <TableHeaderColumn dataField='name'
          >
            Name
          </TableHeaderColumn>
          <TableHeaderColumn dataField='value'
          >
            Value
          </TableHeaderColumn>
        </BootstrapTable>
      </div>
    )
  }
}

export default Table9
汇出资料

这是从我们的小表中导出的数据:

"id","name","value"
"1","Gob","2"
"2","Buster","5"
"3","George Michael","4"

定制所有东西

我们讨论了很多材料,但是React-bootstrap-table的存储量更多。 实际上,每个方面都可以定制。 阅读有关如何自定义表格的完整文档

这是可定制部分的列表:

  • 细胞
  • 工具列
  • 插入模态
  • 分页
  • 列过滤器
  • 单元格编辑
  • 行选择列

结论

React-bootstrap-table提供了强大的功能。 它开箱即用地提供了一个令人愉悦的用户界面,用于显示,搜索和处理表格数据。 该API非常一致-主要功能可以通过指定简单属性来启用,也可以选择自定义其他属性,这些属性通常可以是动态功能。

尽管默认行为和基本配置应该可以满足大多数用户的需要,但是如果您需要更多高级功能和自定义设置,则有足够的文档和示例来说明如何实现。

在过去的几年中,React越来越受欢迎。 实际上,我们在市场上有许多商品可供购买,查看,实施等。 如果您正在寻找有关React的其他资源,请随时检查

翻译自: https://code.tutsplus.com/tutorials/working-with-tables-in-react-part-two--cms-29683

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值