I have a project in react native and I need to read data from a firebase db in realtime.
I try to:
const [numberTrains, setNumberTrains] = useState(0)
function Read(){
const starCountRef = ref(db, 'users/' + user.localId);
onValue(starCountRef, (snapshot) => {
const data = snapshot.val();
setNumberTrains(data.countTrains);
});
}
Read()
console.log(numberTrains)
But it throws the exception: Error: Too many re-renders. React limits the number of renders to prevent an infinite loop.
And the output looks like:
LOG 0
LOG 1
LOG 1
LOG 1
LOG 1
LOG 1
LOG 1
LOG 1
LOG 1
LOG 1
LOG 1
LOG 1
LOG 1
LOG 1
LOG 1
LOG 1
LOG 1
LOG 1
LOG 1
LOG 1
LOG 1
LOG 1
LOG 1
LOG 1
LOG 1
LOG 1
How can I read data in numberTrain only once?
>Solution :
Use useEffect
const [numberTrains, setNumberTrains] = useState(0)
function Read(){
const starCountRef = ref(db, 'users/' + user.localId);
onValue(starCountRef, (snapshot) => {
const data = snapshot.val();
setNumberTrains(data.countTrains);
});
}
React.useEffect(()=>{
Read();
console.log(numberTrains)
},[]);