L'interface utilisateur de Reactjs n'est pas mise à jour
P粉649990163
2023-08-14 17:32:30
<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>
Une façon est d'écrire comme ceci :
fetchNote
是一个异步函数,所以它需要一些时间来完成任务并获取数据。因此,你应该等待数据准备好,不幸的是,当你在调用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 :