Я только что сделал анимированную «загрузку ..» с использованием css, но я хочу, чтобы он существовал только тогда, когда он ожидает загрузки / рендеринга данных ... Любая идея, как я на самом деле не знаю, насколько я новичок в этом? ...

Это мой компонент

componentDidMount() {
  $.ajax({
  url:'http://localhost:5118/api/employeedetails/getemployeedetails/',
  success:(data)=>{

    this.setState({
      jsonReturnedValue:data
    })
  }
})
  this.setState({isLoading: false})   
}

Это мой рендер

renderItem(d, i) {
  return <tr key={i} >
    <td> {d.Employee_ID} </td>
    <td>{d.Employee_Name}</td>
    <td>{d.Address }</td> 
    <td><center><button className ="btn btn-info" onClick={this.handleOnclick.bind(this,  d.Employee_ID, d.Employee_Name, d.Address , d.Department , i)}   data-toggle="modal" data-target="#UpdateEmployee">Edit</button></center></td>
    <td><center><button className ='btn btn-danger'  onClick={this.handleOnclick2.bind (this,d.Employee_ID,d.Employee_Name,i)} data-toggle="modal" data-target="#DeleteEmployee"> Delete</button></center></td>
    </tr>
}

render() {
      if(this.state.isLoading) {
           return <span className="Loader">
          <div className="Loader-indicator" >
            <h1>
              <span>Loading</span>
              <span className="Loader-ellipsis" >
                <span className="Loader-ellipsisDot">.</span>
                <span className="Loader-ellipsisDot">.</span>
                <span className="Loader-ellipsisDot">.</span>
              </span>
            </h1>
          </div>
        </span>
     }

    let {jsonReturnedValue} = this.state;
    const isEnabled = this.canBeSubmitted();


  return(
    <div>
    <div>

        <div className="container">   
          <h1> Listof Employees </h1>
            <button className ='btn btn-warning right ' data-toggle="modal" data-target="#AddEmployee"> Add an Employee</button>
             <table className= "table table-bordered" id="result"> 
                <tbody>
                 <tr>
                      <th>ID</th>
                      <th>Name</th>
                      <th>Address</th>
                      <th>Update</th>
                      <th>Delete</th>
                 </tr>
                    {jsonReturnedValue.map((d,i) => this.renderItem(d,i))}
                </tbody>

            </table>
          </div>
0
P.Macs 29 Май 2017 в 06:59

2 ответа

Лучший ответ

Поддерживайте состояние в вашем реагирующем компоненте, которое имеет значение true, когда вы даете вызов для загрузки данных

Например

class App extends React.Component {
     constructor(){
         super();
         this.state = {isLoading: true}
     }


componentDidMount() {


   $.ajax({
      url:'http://localhost:5118/api/employeedetails/getemployeedetails/',
      success:(data)=>{ 
        this.setState({
           jsonReturnedValue:data, isLoading: false
        })
      }
   })

}

render() {
     if(this.state.isLoading) {
           return <span className="Loader">
          <div className="Loader-indicator" >
            <h1>
              <span>Loading</span>
              <span className="Loader-ellipsis" >
                <span className="Loader-ellipsisDot">.</span>
                <span className="Loader-ellipsisDot">.</span>
                <span className="Loader-ellipsisDot">.</span>
              </span>
            </h1>
          </div>
        </span>
     }
     return (
         <div>Hello World</div>
     )

}

Посмотреть демонстрационный фрагмент

class App extends React.Component {
         constructor(){
             super();
             this.state = {isLoading: true}
         }
    
    
    componentDidMount() {
  
       setTimeout(() => {this.setState({isLoading: false})}, 3000)
      
    }
    
    render() {
         if(this.state.isLoading) {
               return <span className="Loader">
              <div className="Loader-indicator" >
                <h1>
                  <span>Loading</span>
                  <span className="Loader-ellipsis" >
                    <span className="Loader-ellipsisDot">.</span>
                    <span className="Loader-ellipsisDot">.</span>
                    <span className="Loader-ellipsisDot">.</span>
                  </span>
                </h1>
              </div>
            </span>
         }
         return (
             <div>Hello World</div>
         )
     
    }
}    
    ReactDOM.render(<App/>, document.getElementById('app'));
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>
<div id="app"></div>
2
Shubham Khatri 29 Май 2017 в 06:28

Добавить состояние loading и сделать его истинным при загрузке данных.

В функции render() добавьте код состояния загрузки, используя оператор ?.

{this.state.loading ? (<YourComponent />) : (<LoadingState />)}

Замените <YourComponent /> и <LoadingState /> вашим компонентом или необходимыми тегами jsx ...

0
Lojka 29 Май 2017 в 04:12