Memilih Cangkuk React yang sesuai untuk digunakan dengan gambar on Firestore
P粉555682718
2023-08-24 13:48:51
<p>Saya banyak menggunakan syot kilat Firestore dalam apl React Native saya. Saya juga menggunakan cangkuk React. Kod kelihatan seperti ini: </p>
<pre class="brush:php;toolbar:false;">useEffect(() ==> {
someFirestoreAPICall().onSnapshot(snapshot => {
// Apabila komponen mula dimuatkan, tambah semua data yang dimuatkan ke keadaan.
// Apabila data pada Firestore berubah, kami menerima kemas kini dalam panggilan balik ini,
// Kemudian kemas kini UI berdasarkan keadaan semasa
});;
}, []);</pre>
<p>Pada mulanya, saya fikir <code>useState</code> ialah cangkuk terbaik untuk menyimpan dan mengemas kini UI. Walau bagaimanapun, mengikut tetapan <code>useEffect</code> saya, yang disertakan dengan tatasusunan kebergantungan kosong, apabila panggilan balik syot kilat dicetuskan dan saya cuba mengubah suai keadaan semasa dengan perubahan baharu, keadaan semasa tidak ditentukan . Saya fikir ini adalah disebabkan oleh penutupan. Saya dapat menyelesaikan masalah dengan menggunakan <code>useRef</code> dan <code>forceUpdate()</code>
<pre class="brush:php;toolbar:false;">const dataRef = useRef(initialData);
const [, updateState] = React.useState();
const forceUpdate = useCallback(() => updateState({}), []);
useEffect(() => {
someFirestoreAPICall().onSnapshot(snapshot => {
// Jika data syot kilat ditambah
dataRef.current.push(newData)
forceUpdate()
// Jika data syot kilat dikemas kini
dataRef.current.find(e => beberapa syarat) = updatedData
forceUpdate()
});;
}, []);
kembali(
// JSX menggunakan dataRef.current
)</pra>
<p>Soalan saya ialah, adakah saya menggunakan <code>useRef</code> dengan betul serta <code>forceUpdate</code> yang berbeza daripada <code>useState</code>? Saya rasa ingin mengemas kini cangkuk <code>useRef</code> dan memanggil <code>forceUpdate()</code> Apabila cuba menggunakan <code>useState</code>, saya cuba menambah pembolehubah keadaan pada tatasusunan kebergantungan, tetapi ia menghasilkan gelung tak terhingga. Saya hanya mahu memulakan fungsi syot kilat sekali dan mahu data berstatus dalam komponen dikemas kini dari semasa ke semasa apabila bahagian belakang berubah (dicetuskan dalam panggilan balik onSnapshot). </p>
Adalah lebih baik jika anda menggabungkan useEffect dan useState. useEffect bertanggungjawab untuk menetapkan dan melumpuhkan pendengar, dan useState hanya bertanggungjawab untuk data yang anda perlukan.
Kemudian anda boleh terus merujuk "data" dalam cangkuk useState dalam aplikasi anda.
Penggunaan mudahKesan berkesan untuk saya, saya tidak perlu mencipta fungsi pembantu atau apa-apa jenis,
Penggunaan mudahKesan berkesan untuk saya, saya tidak perlu mencipta sebarang fungsi pembantu atau apa-apa seperti itu,