亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

L'interface utilisateur de Reactjs n'est pas mise à jour
P粉649990163
P粉649990163 2023-08-14 17:32:30
0
1
865
<p>J'apprends React et j'ai appris quelques bases, j'ai donc utilisé ces connaissances pour réaliser ce projet de base. Je crée une application simple de sauvegarde de notes en utilisant React et Firebase. </p> <p>Les données sont transférées parfaitement vers la base de données Firebase. </p> <p>Obtenir des données. </p> <p>Le problème auquel je suis confronté est que les données récupérées ne sont pas mises à jour dans l'interface utilisateur. </p> <p><br /></p> <pre class="snippet-code-js lang-js Prettyprint-override"><code>import { useEffect, useState } from 'react'; importer { AiFillCaretUp } depuis 'react-icons/ai' ; importer './Card.css'; fonction d'exportation par défaut Carte (accessoires) { const [showPara, setShowPara] = useState(false); const [données, setData] = useState([]); console.log('carte intérieure'); useEffect(() => { laissez notesData = []; console.log('à l'intérieur de UseEffect'); const fetchNote = async () => const réponse = wait fetch('https://notes-keeper-react-default-rtdb.firebaseio.com/notes.json'); const data = attendre réponse.json(); pour (clé const dans les données) { notesData.push({ id : clé, titre : données[clé].titre, note : données[clé].note }); } }?; récupérerNote(); // console.log(notesData); setData(notesData); }, []); const toggleHandler = () => setShowPara((preVal) => !preVal); }?; const paraClass = showPara ? 'card-para toggle' : 'card-para'; const rotate = showPara ? 'ic?ne rotation' : 'ic?ne'; retour ( <div className='conteneur'> {console.log('à l'intérieur du conteneur de carte', données)} {data.map((carte) => ( <div className='card' key={card.id}> <div className='card-title' onClick={toggleHandler}> <h3>{card.title}</h3> <AiFillCaretUp className={rotate} /> </div> <div className={paraClass}> <p>{card.note}</p> </div> </div> ))} </div> ); }</code></pre> <p><br /></p> <p>Afficher les données ici</p> <pre class="brush:php;toolbar:false;">{console.log('inside card containers', data)}</pre> <p>Mais ?a ne marche pas</p> <pre class="brush:php;toolbar:false;">{data.map((card) => ( <div className='card' key={card.id}> <div className='card-title' onClick={toggleHandler}> <h3>{card.title}</h3> <AiFillCaretUp className={rotate} /> </div> <div className={paraClass}> <p>{card.note}</p> </div> </div> ))} </div></pre> <p>J'espère que vous comprenez le problème. </p>
P粉649990163
P粉649990163

répondre à tous(1)
P粉276064178

Une fa?on est d'écrire comme ceci?:

useEffect(() => {
    let notesData = [];
    const fetchNote = async () => {
      const response = await fetch('https://notes-keeper-react-default-rtdb.firebaseio.com/notes.json');
      const data = await response.json();
      for (const key in data) {
        notesData.push({ id: key, title: data[key].title, note: data[key].note });
      }
      setData(notesData); // 在這里數(shù)據(jù)已經(jīng)準(zhǔn)備好了
    };
    fetchNote();
  }, []);

fetchNote 是一個(gè)異步函數(shù),所以它需要一些時(shí)間來完成任務(wù)并獲取數(shù)據(jù)。因此,你應(yīng)該等待數(shù)據(jù)準(zhǔn)備好,不幸的是,當(dāng)你在調(diào)用 fetchNote() 后立即使用 setData(notesData) Les données ne sont pas encore prêtes.

Alternativement vous pouvez renvoyer les données à l'intérieur de la fonction asynchrone et renvoyer automatiquement une autre promesse qui résout les données requises, puis vous pouvez mettre à jour vos données?:

useEffect(() => {
    let notesData = [];
    const fetchNote = async () => {
      const response = await fetch('https://notes-keeper-react-default-rtdb.firebaseio.com/notes.json');
      const data = await response.json();
      for (const key in data) {
        notesData.push({ id: key, title: data[key].title, note: data[key].note });
      }
      return notesData; // 返回一個(gè)解析為 'notesData' 的 promise
    };

    fetchNote()
      .then((updatedData) => {
        setData(updatedData);
      })
  }, []);
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal