const [todos, setTodos] = useState([])
useEffect(() => {
fire
.firestore()
.collection("todos")
.onSnapshot((snapshot) => {
snapshot.docChanges().forEach((change) => {
if (change.type === "added") {
let newTodo = change.doc.data();
setTodos((prevTodos) => [...prevTodos, newTodo]);
}
});
});
}
});
}, [])
Если при таком подходе возникнут проблемы с перерисовкой, попробуйте обернуть внутренний код в ловушку useCallback:
const makeTodos = useCallback(() => {
fire
.firestore()
.collection("todos")
.onSnapshot((snapshot) => {
snapshot.docChanges().forEach((change) => {
if (change.type === "added") {
let newTodo = change.doc.data();
setTodos((prevTodos) => [...prevTodos, newTodo]);
}
});
});
}
});
}, [])
Затем вызовите эту функцию в useEffect:
useEffect(() => {
makeTodos();
}, [])
usseEffect , useState и useCallback, которые вы можете импортировать из реакции:
Import React, {useState, useEffect, useCallback} from 'react'