为此,首先保持一个 bool 在 state 将跟踪数据是否被提取的变量,初始值 bool 将会 false 。
bool
state
false
constructor(){ super(); this.state = { isDataFetched: false, } }
现在有一个属性 React-Bootstrap-Table , option 用于设置默认值并自定义 noDataText ,你可以使用它,像这样:
React-Bootstrap-Table
option
noDataText
<BootstrapTable .... options={tableOtions}> </BootstrapTable>
现在定义它 tableOtions object 并编辑 noDataText 财产,像这样:
tableOtions
object
let tableOtions = { noDataText: this._setTableOption(), };
如果成功获取数据则 return 一些文本,如果数据为空将显示,否则返回一个加载器:
return
_setTableOption(){ if(this.state.isDataFetched){ return "No expenses found"; }else{ return( <RefreshIndicator size={40} left={0} top={0} status="loading" style={{position: 'relative', margin: '0px auto'}}/> ); } }
的 注意 强> :我用了一个 Material-UI RefreshIndicator ,您也可以通过任何其他装载机替换它。
的 参考 强> 的 option 对象 React Bootstrap Table : http://allenfang.github.io/react-bootstrap-table/docs.html#noDataText
React Bootstrap Table
的 更新: 强> 使用此代码,并替换 RefreshIndicator 通过 Loader 你想要展示:
RefreshIndicator
Loader
import React, { Component } from 'react'; import { BootstrapTable, TableHeaderColumn } from 'react-bootstrap-table'; import PageHeader from 'react-bootstrap/lib/PageHeader'; import database from './database'; import root from 'window-or-global'; import Loading from 'react-loading'; class User extends Component { constructor(props) { super(props); this.state = { text:'', products: [], isDataFetched: false, }; this.userRef = database.ref('users'); } componentDidMount() { this.userRef.on('value', this.gotData, this.errData); } gotData = (data) => { let newProducts = [] const userdata = data.val(); const keys = Object.keys(userdata); for (let i = 0; i < keys.length; i++) { const k = keys[i]; newProducts.push({ name: userdata[k].nama, address: userdata[k].address, email: userdata[k].email }); } this.setState({products : newProducts, isDataFetched: true}); } errData = (err) => { console.log(err); } handleClick = (rowKey) => { alert(this.refs.table.getPageByRowKey(rowKey)); } _setTableOption(){ if(this.state.isDataFetched){ return "No expenses found"; }else{ return( <RefreshIndicator size={40} left={0} top={0} status="loading" style={{position: 'relative', margin: '0px auto'}}/> ); } } render() { let tableOtions = { noDataText: this._setTableOption(), }; return ( <div> <Loading type ='spinning-bubbles' color='#e3e3e3' /> <div className="col-lg-12"> <PageHeader>Members</PageHeader> </div> <BootstrapTable ref='table' data={ this.state.products } pagination={ true } search={ true } options={tableOtions}> > <TableHeaderColumn dataField='name' isKey={true} dataSort={true}>Name</TableHeaderColumn> <TableHeaderColumn dataField='address' dataSort={true}>Address</TableHeaderColumn> <TableHeaderColumn dataField='email'>Email</TableHeaderColumn> </BootstrapTable> </div> ); } } export default User;