MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Meteor / ReactJS - Problema di lampeggiamento dell'interfaccia utente:rendering due volte prima e dopo il controllo di un database

Il tuo container si iscrive ai dati e monitora il ready dell'abbonamento stato:

createContainer(() => {
  const todosHandle = Meteor.subscribe('tasks');
  const loading = !todosHandle.ready();

  return {
    loading,
    tasks: Tasks.find({}, { sort: { createdAt: -1 } }).fetch(),
  };
}, App);

Ciò significa che il tuo componente riceverà un loading booleano prop che indica se i dati sono disponibili o meno. Puoi usarlo nel tuo componente per eseguire il rendering di un loading visualizzare durante il caricamento dei dati:

class App extends Component {
  //...
  render() {
    const {loading, tasks} = this.props;
    if (loading) {
      return (
        <div className="spinner">
          Loading...
        </div>
      );
    }
    return (
      <div className="container">
        <header>
          <h1>Todo List</h1>
        </header>
          //...
      </div>
    );
  }
}

o qualsiasi altra combinazione di componenti che dipende dallo stato di caricamento.

A proposito, le tasks prop è un array, quindi usando tasks.length invece di Object.keys è probabilmente migliore.