Я никогда не нахожу решение для моей проблемы useEffect: я использую firebase и создаю слушатель (onSnapshot) в моей базе данных, чтобы получить последнее состояние моего объекта "Player", которое я могу получить, когда состояния currentGroup
и currentUser
доступны
const [currentGroup, setCurrentGroup] = useState(null)
const [currentUser, setCurrentUser] = useState(null)
const [currentPlayer, setCurrentPlayer] = useState(null)
const IDefineMyListener = () =>{
return firebase.doc(`group/${currentGroup.id}${users/${currentUser.id}/`)
.onSnpashot(snap =>{
//I get my snap because it changed
setCurrentPlayer(snap.data())
})
}
Выше, я называю useEffect, когда доступны currentGroup
и currentUser
и (ВАЖНО), если я еще не установил currentPlayer
useEffect(() => {
if (!currentGroup || !currentUser) return
if (!currentPlayer) {
let unsubscribe = IDefineMyListener()
return (() => {
unsubscribe()
})
}
},[currentGroup,currentUser])
Как вы можете подумать, unsubscribe()
вызывается, даже если IDefineMyListener()
не переопределено. Другими словами, когда currentGroup
или currentUser
изменяется, этот useEffect
удалял моего слушателя, тогда как мне НУЖНО ЭТО.
Как я могу понять ?!
PS: если я удаляю if (!currentPlayer)
, конечно, это работает, но не получит мои данные
PS2: Если я удаляю отписку, мой слушатель вызывается дважды каждый раз.