UI dalam Reactjs tidak dikemas kini
P粉649990163
2023-08-14 17:32:30
<p>Saya sedang belajar React dan mempelajari beberapa asas, jadi saya menggunakan pengetahuan ini untuk membuat projek asas ini.
Saya sedang membuat apl penjimatan nota ringkas menggunakan React dan Firebase. </p>
<p>Pemindahan data ke pangkalan data Firebase dengan sempurna. </p>
<p>Dapatkan data. </p>
<p>Masalah yang saya hadapi ialah data yang diambil tidak dikemas kini dalam UI. </p>
<p><br /></p>
<pre class="snippet-code-js lang-js prettyprint-override"><code>import { useEffect, useState } daripada 'react';
import { AiFillCaretUp } daripada 'react-icons/ai';
import './Card.css';
eksport fungsi lalai Kad(props) {
const [showPara, setShowPara] = useState(false);
const [data, setData] = useState([]);
console.log('kad dalam');
useEffect(() => {
biarkan notaData = [];
console.log('di dalam UseEffect');
const fetchNote = async () =>
respons const = tunggu fetch('https://notes-keeper-react-default-rtdb.firebaseio.com/notes.json');
data const = menunggu respons.json();
for (const key in data) {
notesData.push({ id: key, title: data[key].title, note: data[key].note });
}
};
fetchNote();
// console.log(notesData);
setData(notesData);
}, []);
const toggleHandler = () =>
setShowPara((preVal) => !preVal);
};
const paraClass = showPara ?
const rotate = showPara ?
kembali (
<div className='container'>
{console.log('bekas kad dalam', data)}
{data.map((kad) => (
<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>Tunjukkan data di sini</p>
<pre class="brush:php;toolbar:false;">{console.log('bekas kad dalam', data)}</pre>
<p>Tetapi ia tidak berkesan</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>Saya harap anda memahami masalah ini. </p>
Salah satu cara ialah menulis seperti ini:
fetchNote
是一个异步函数,所以它需要一些时间来完成任务并获取数据。因此,你应该等待数据准备好,不幸的是,当你在调用fetchNote()
后立即使用setData(notesData)
Data belum siap lagi.Sebagai alternatif anda boleh mengembalikan data di dalam fungsi async dan secara automatik mengembalikan janji lain yang menyelesaikan kepada data yang diperlukan, dan kemudian anda boleh mengemas kini data anda: