Topic de hedyLamarr :

aide [react]

  • 1

Bonjour les kheys, je suis en L3 informatique et je suis une matière dev web ( c'est la première fois que j'en fais)

j'ai un bug et j'aimerais savoir si vous savez comment le résoudre:

je dois coder un twitter fait maison. sur les pages profil j'ai une bannière qui affiche les informations d'un compte utilisateur:

https://image.noelshack.com/fichiers/2021/17/6/1619882124-image-pasted-at-2021-5-1-15-29.jpg

3:29 PM

appelée comme ceci dans la méthode render de mainPage.js :

https://image.noelshack.com/fichiers/2021/17/6/1619882179-image-pasted-at-2021-5-1-15-30.jpg

BaniereProfil affiche la barre du screen au dessus.

quand je vais sur la page fil d'actualité , puis que je reviens sur le profil les compteurs se mettent à jour.
Par contre si je suis sur une page profil et que je veux passer à une autre page profil les compteurs ne se mettent pas à jour (seulement le pseudo sur la barre change)


import React, { useEffect, useState } from 'react'
import axios from 'axios'


export default function Baniere(props) {

  const [nb_followers, getnb_followers] = useState(0);
  const [nb_follows, getnb_follows] = useState(0);
  const [nb_tweets_state, getnb_tweets] = useState(0);
  const [follow_button_state, getfollow_button_state] = useState(0);
  const [pseudo,getpseudo]=useState(props.pseudo);
  
  
  
  const api = axios.create({
    baseURL : '/api/',
    timeout : 1000,
    headers : {'X-Custom-Header' : 'foobar'}
  });
  
  useEffect(() => {
    Update_baniere();
  }, []);
  
  
  
  const follow_button_maj = () => {
    if (follow_button_state==0){
      var chemin='/user/follow';
      api.put(chemin,{pseudo:pseudo})
      .then( () => {
        Update_baniere().then( ()=>{
          getfollow_button_state(1)
        });
        
        
      })
      .catch(err => {
        console.log(err);
      });
    }else{
      var chemin='/user/unfollow';
      api.put(chemin,{pseudo:pseudo})
      .then( () => {
                Update_baniere().then( ()=>{
          getfollow_button_state(0)
        });
        
      })
      .catch(err => {
        console.log(err);
      });
    }
  }
  
  
  
  const Update_baniere = () => {
  
    const getALLnb_followers = () => {
      var chemin='/user/display/count/followers/'+pseudo;
      api.get(chemin)
      .then( response => {
        const nb_followers__ = response.data.FollowersCount;
        getnb_followers(nb_followers__);
        })
      .catch(err => {
        console.log(err);
        });
      }
  
    const getALLnb_follows = () => {
      var chemin='/user/display/count/follows/'+pseudo;
      api.get(chemin)
      .then( response => {
        const nb_follows__ = response.data.FollowsCount;
        getnb_follows(nb_follows__);
       })
      .catch(err => {
        console.log(err);
       });
     }
  
    const get_nb_tweets = () => {
      var chemin='/user/display/count/messages/'+pseudo;
      api.get(chemin)
      .then( response => {
      const nb_tweets_ = response.data.nb_tweets;
      getnb_tweets(nb_tweets_);
    })
    .catch(err => {
      console.log(err);
    });
      }
  
    Promise.all([getALLnb_followers, getALLnb_follows, get_nb_tweets]).then((values) => {
        const follows=values[0];
        const followe=values[1];
        const nb_messages=values[2];
        
          getnb_followers(follows);
          getnb_follows(followe);
          getnb_tweets(nb_messages);
    });
  
  
 }
    const display_Baniere=(props) => {
          return (
          <div className="baniere">
            <div className="nom">
              <h1>{props.pseudo}</h1>
            </div>
            
            <div className="content_b">
            <h2>{nb_tweets_state} posts</h2>
            </div>
          
            <div className="content_b">
            <h2>{nb_follows} abonnements</h2>
            </div>
          
            <div className="content_b">
            <h2> {nb_followers} abonnés </h2>
            </div>
            
      {
        (props.selfPseudo!=pseudo)?
        <div className="petitbouton_follow" onClick = { (event => follow_button_maj() ) } >
        <div>
        {        
          (follow_button_state==0)?
          <>
          Suivre
          </>
          :
          <>
          Ne plus suivre
          </>

        }
        </div>
        </div>
        :
        <></>
      }
          </div>
    )
    }
  
    return (
      <>
      {display_Baniere(props)}
      </>
    )
  
    

}

3:31 PM

j'ai regardé et dans baniereProfil , la méthode useState n'est pas rappelée si je suis dans le cas ou je passe d'une page profil à une autre

auriez vous une idée de la source du bug? et comment le résoudre.. merci!

En fait les requêtes fonctionnent c’est juste Usestate qui est pas rappelé si je passe d’une page profile directement à une autre
J’aurai du mettre un Cul ca attire les kheys Informaticiens
Utilise une fonction flèchée dans tes changements d'état

Le 01 mai 2021 à 17:34:36 :
Utilise une fonction flèchée dans tes changements d'état

C’est à dire?

Ici?

const follows=values[0];
const followe=values[1];
const nb_messages=values[2];

getnb_followers(follows);
getnb_follows(followe);
getnb_tweets(nb_messages);

  • 1

Données du topic

Auteur
hedyLamarr
Date de création
1 mai 2021 à 17:20:05
Nb. messages archivés
6
Nb. messages JVC
6
En ligne sur JvArchive 120