IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

React Discussion :

Ne rafraichir qu'un seul composant


Sujet :

React

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Avatar de topolino
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    1 901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 901
    Par défaut Ne rafraichir qu'un seul composant
    Bonjour à tous,

    Je suis en train de developper une application en temps réel avec les websockets.
    Les donneés que je recois me permette de constituer un tableau html oû les cellules doivent se mettre à jour continuellement.
    Mon probleme, est qu'a chaque fois que je recois une mise à jour d'une ligne de mon tableau alors react me rafraichit l'intergralité des lignes, ce qui detruit les performances. Comment dois je proceder ?

    Lorsque je recois une mise à jour de donnée pour une ligne, je mets à jour mon array de données
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     this.items[index][4] = stockItem[4];
     this.items[index][5] = stockItem[5];
     this.items[index][2] = stockItem[2];
     
     this.setState({
          quotes: this.items
        });
    Puis je mets à jours mon tableau html
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    const itemsT = this.state.quotes.map((item, index) => (
          <div key={item["requestId"]}>
            <TableRow quote={item} />
            <br />
          </div>
        ));
    Mais au lieu de mettre à jour uniquement la ligne concernée, avec la map toutes mes lignes sont continuellement mise à jour.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    class TableRow extends Component {
      render() {
        return (
          <div>
            {this.props.quote[4]} - {this.props.quote[2]} - {this.props.quote[5]}
          </div>
        );
      }
    }
    Comment dois je proceder ?

    Merci pour vos avis

  2. #2
    Membre Expert
    Avatar de gwyohm
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2007
    Messages
    925
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 925
    Par défaut
    Salut,

    As-tu essayé d'implémenter shouldComponentUpdate dans le composant TableRow ?
    Quelque chose comme ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    shouldComponentUpdate(nextProps) {
        if (this.props.quote.length !== nextProps.quote.length) {
          return true;
        }
        return nextProps.quote.some((item, index) => item !== this.props.quote[index]);
      }
    Je ne sais pas trop ce que contiennent tes données dans quote, mais avec ce code, on indique à react qu'il est nécessaire de rafraichir le composant si
    1. la taille du tableau props.quote a changée (ici la taille compte...)
    2. au moins une entrée dans quote a changée (à adapter si tu a des objets qui ne peuvent pas être comparée bêtement comme je le fais là)

  3. #3
    Membre très actif

    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    506
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2009
    Messages : 506
    Par défaut
    Citation Envoyé par topolino Voir le message
    Bonjour à tous,...
    Bonjour,
    Que veux-tu dire par React rafraichit l'intégralité des lignes?
    Si tu veux dire il fait le 'render' pour toutes les lignes, oui c'est normal.
    Mais ce 'render' est en pur javascript, il ne touchera pas le DOM, cela devrait être quasi instantané
    Le code serait-il dispo quelque part pour essayer?

  4. #4
    Membre très actif

    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    506
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2009
    Messages : 506
    Par défaut
    Citation Envoyé par frfancha Voir le message
    Bonjour,...
    Aussi, tu n'as aucun état dans ton TableRow, donc il faudrait en faire une fonction ça va bien aider les perfs.

    comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    const TableRow  = ({quote}) => (
          <div>
            {quote[4]} - {quote[2]} - {quote[5]}
          </div>
    );

Discussions similaires

  1. Réfléchir un seul composant avec a4j:support
    Par ala1986 dans le forum JSF
    Réponses: 3
    Dernier message: 11/04/2012, 17h21
  2. Réponses: 9
    Dernier message: 14/04/2010, 08h06
  3. Executer plusieurs requêtes par un seul composant query
    Par magicstar dans le forum Débuter
    Réponses: 18
    Dernier message: 24/10/2009, 11h56
  4. Plusieurs requêtes de création dans un seul composant ado => bug
    Par SkYsO dans le forum Bases de données
    Réponses: 9
    Dernier message: 25/04/2008, 15h21
  5. Hook sur un seul composant d'un TFrom
    Par Neilos dans le forum C++Builder
    Réponses: 2
    Dernier message: 20/11/2004, 17h46

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo