Saya sedang membuat aplikasi menggunakan Firebase di React, dan saya terkejut saat mengetahui bahwa saya telah mencapai batas baca 50k untuk hari itu. Saya tidak tahu bagaimana hal itu mungkin terjadi karena aplikasi saya hanya berjalan secara lokal di mesin saya, dan saya adalah SATU-SATUNYA pengguna.
Masalah yang saya hadapi terkait dengan pemasangan ulang komponen saya saat melakukan panggilan asinkron yang mengubah variabel status.
Berikut adalah contoh cara yang buruk untuk melakukan panggilan asinkron menggunakan useEffect.
import {useEffect} from 'react'
function Example() {
const [vehicles, setVehicles] = useState([])
const vehiclesRef = collection(db, 'vehicles')
useEffect(() => {
const getVehicles = async () => {
const data = await getDocs(vehiclesRef)
setVehicles(data.docs.map( doc => ( // memory leaks
{
...doc.data(),
id:doc.id
}
)
)
)
}
getVehicles()
},[vehicles])
}
Peringatan: Tidak dapat melakukan pembaruan status React pada komponen yang dilepas. Ini adalah no-op, tetapi ini menunjukkan kebocoran memori di aplikasi Anda. Untuk memperbaiki, batalkan semua langganan dan tugas asinkron dalam fungsi pembersihan useEffect.
Saat memanggil setState, komponen Anda akan merender ulang untuk memperbarui DOM dengan perubahan pada nilai tersebut. Ini berarti setVehicles()akan terus melakukan inisialisasi setiap kali komponen dipasang. Ini akan menyebabkan perulangan tanpa henti, yang akan menghabiskan banyak uang saat melakukan panggilan fungsi yang mahal.
Inilah cara saya memperbaikinya.
import {useEffect, useRef} from 'react'
function Example() {
const [vehicles, setVehicles] = useState([])
const vehiclesRef = collection(db, 'vehicles')
useEffect(() => {
let isMounted = true
const getVehicles = async () => {
const data = await getDocs(vehiclesRef)
if(isMounted){
setVehicles(data.docs.map( doc => (
{
...doc.data(),
id:doc.id
}
)
)
)
}
}
getVehicles()
console.log(vehicles)
return () => { isMounted = false }
}, [vehicles])
}
Kapan isMounted , falsekode tidak akan berjalan hingga nilai tersebut disetel ke true, saat komponen dipasang kembali.
Semoga ini membantu!
Terima kasih telah menjadi bagian dari komunitas kami! Sebelum kamu pergi:
Pendahuluan Stroke adalah keadaan darurat medis yang dapat menyerang siapa saja kapan saja. Itu terjadi ketika aliran darah ke bagian otak terganggu, yang menyebabkan hilangnya fungsi otak secara tiba-tiba.
Mulailah perjalanan inovasi dan kesuksesan yang mendebarkan saat Anda memanfaatkan potensi yang belum dimanfaatkan dari platform tanpa kode yang mengejutkan ini. Izinkan saya berbagi cerita dengan Anda tentang Sapna, seorang pengusaha wanita yang luar biasa.
Kita sering menemukan diri kita berjuang untuk menerapkan apa yang kita tahu baik untuk kita. Dari memberi tahu orang penting bahwa kita mencintai mereka hingga mengingat untuk berbicara seperti bajak laut, akan selalu ada orang yang mengklaim bahwa acara sehari, seminggu, atau sebulan tidak diperlukan karena mereka sudah melakukan hal-hal itu.
Kemarin kami menutup pintu pada Kontes Lagu Eurovision tahun ini dengan grand final yang gemerlap dan kacau di mana penyanyi Swedia Loreen membawa pulang trofi, menjadi wanita pertama yang menang dua kali dan membawa mahkota kembali ke Swedia 50 tahun setelah ABBA memenangkan kompetisi dengan "Waterloo". Mereka kemudian menjadi salah satu aksi terbesar dalam kanon musik pop.
[Peringatan pemicu: Esai ini mencakup tangkapan layar orang-orang yang memuji pembunuh Jordan Neely.] Petugas penegak hukum akhirnya - dan mungkin dengan enggan - menuntut Daniel Penny, pria yang mencekik Jordan Neely sampai dia mati, atas pembunuhan itu.
Jika kita ingin terus berkembang di planet ini, kita harus melakukan percakapan yang berbahaya. Yang menantang apa yang telah kita lakukan, apa yang kita lakukan, dan apa yang saat ini akan terus kita lakukan (atau rencanakan untuk lakukan).