【问题标题】:how add react-loading in react bootstrap table如何在反应引导表中添加反应加载
【发布时间】:2017-04-11 16:01:31
【问题描述】:

我是 reactjs 和 react bootstrap 表的新手。我想在数据显示之前在我的反应组件中添加反应加载。因为数据显示这么久。但不起作用。

这是我的代码

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: []
    };

   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});
  }

  errData = (err) => {
   console.log(err);
 }

  handleClick = (rowKey) => {
    alert(this.refs.table.getPageByRowKey(rowKey));
  }

    render() {
    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 }>
          <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;

祝你好运!希望回复。

【问题讨论】:

    标签: reactjs react-bootstrap-table


    【解决方案1】:

    为此,首先在state 变量中维护一个bool,该变量将跟踪是否获取数据,该bool 的初始值为false

    constructor(){
         super();
         this.state = {
            isDataFetched: false,
         }
    }
    

    现在有了React-Bootstrap-Tableoption的属性,用来设置默认值和自定义noDataText,你可以这样使用:

    <BootstrapTable 
         ....
         options={tableOtions}>
    </BootstrapTable>
    

    现在定义 tableOtions object 并编辑 noDataText 属性,如下所示:

    let tableOtions = {
        noDataText: this._setTableOption(),
    };
    

    如果成功获取数据则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,你也可以用其他任何加载器替换它。

    React Bootstrap Tableoption 对象的

    引用http://allenfang.github.io/react-bootstrap-table/docs.html#noDataText

    更新:使用此代码,并将您要显示的 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;
    

    【讨论】:

    • 请告诉我代码必须放在哪里..:-( @Mayank Shukla
    • 检查更新的答案,使用相同的代码,只需更换加载器部分,它会工作:)
    猜你喜欢
    • 1970-01-01
    • 2021-06-13
    • 2021-10-23
    • 1970-01-01
    • 1970-01-01
    • 2020-04-17
    • 2020-05-12
    • 1970-01-01
    • 2021-05-03
    相关资源
    最近更新 更多