Я бы сказал, используйте крюк useState
.
Your UserContext.js
import React, { useState, createContext, useEffect } from 'react'
import Firebase from 'firebase'
export const UserContext = createContext();
//export const UserProvider = UserContext.Provider
//export const UserConsumer = UserContext.Consumer
// export default UserContext
export const UserProvider = props => {
const[user, setUser] = useState(
{
username:"blank",
loggendIn: false
}
);
var id = localStorage.getItem('id');
// check if its null
console.log(id);
useEffect(() => {
if(id != null){
console.log('id is there');
// load user from realtime database
const dbOBJ = Firebase.database().ref().child("users").child(id);
dbOBJ.on('value', function(snapshot){
setUser(snapshot.val());
});
}else{
console.log('no id :( ');
}
},[id]) // <==== this will call useEffect again if your id changes
return(
<UserContext.Provider value={[user, setUser]}>
{props.children}
< /UserContext.Provider>
);
}
Причина, по которой эта ошибка возникла, потому что ваше условие выполнено, и вы вызвали setState, что вызвало повторную визуализацию, и это произошло снова, что привело к бесконечному циклу.