db = fire.firestore();
db.collection("events").doc(id).delete().then(() => {
console.log("Document successfully ", deletedEvent);
setDeletedEvent('deleted');
}).catch((error) => {
console.error("Error removing document: ", error);
});
}
Почему не рендерится? Я нажимаю на удалить, и устанавливаю setDeletedEvent('deleted') чтобы произошел перерендер. item то удаляется из базы, но на старнице это видно только после обновления браузера..
можете добавить useEffect с параметром на длину массива из элементов. когда 1 удаляется/добавляется, изменяется и длина массива
Спасибо! Но почему изменение стейта не рендерит то? Стейт точно меняется, и скорей всего все рендерится, но почему тогда карточка пропадает только после обновы странички?
Покажите как вы запрашиваете данные
useEffect(() => { // GETTING DATA FROM FIREBASE const fetchData = async () => { const db = fire.firestore(); const data = await db.collection("events").get(); setEvents(data.docs.map((doc) => ({ ...doc.data() }))); }; fetchData(); }, []);
Теперь открывайте документацию и читайте про юзэфект еще раз
когда стоит пустой массив зависимостей, данный хук срабатывает только 1 раз и только при маунте компонента. докиньте туда длину массива, как описал выше
Разобрался, благодарю!
А лучше вообще запрос в функцию передай, и в useEffect-e вызывай
А если длина массива не известна заранее? Я просто убрал [] теперь отрабатывает вроди как правильно
Так не правильно
У тебя сейчас каждый раз при ре-рендере сомпонента запрос будет срабатывать
так Вам длина неизвестна, но компьютер ее посчитает и при ее изменении реакт перерендерит компонент
Всмысле количесво записей в базе? Это имеете ввиду?
вы берете данные и их сохраняете. изначально длину массива Вы не знаете, но при получении данных ее можно посчитать
понял, сейчас попробую, Спасибо!
Обсуждают сегодня