I'm trying to use useEffect to stop listening to Firebase Firestore collection changes.
I can get Firebase data, But I can't access this unsubscribe();
How can i fix this?
let unsbscribe;
async function getFirebaseData() {
unsbscribe = db.collection('room')
.where('joinUser', 'array-contains-any', [10])
.onSnapshot((res) => {
// do something...
});
useEffect(() => {
getFirebaseData();
return () => {
unsbscribe(); // throws an error that unsubscribe is not a function.
};
}, []);
I'm trying to use useEffect to stop listening to Firebase Firestore collection changes.
I can get Firebase data, But I can't access this unsubscribe();
How can i fix this?
let unsbscribe;
async function getFirebaseData() {
unsbscribe = db.collection('room')
.where('joinUser', 'array-contains-any', [10])
.onSnapshot((res) => {
// do something...
});
useEffect(() => {
getFirebaseData();
return () => {
unsbscribe(); // throws an error that unsubscribe is not a function.
};
}, []);
Share
Improve this question
edited Jan 25, 2022 at 9:24
Shahnawaz Hossan
2,7202 gold badges15 silver badges24 bronze badges
asked Jul 16, 2020 at 12:03
RickRick
891 silver badge7 bronze badges
2 Answers
Reset to default 4You can unsubscribe it from inside the useEffect
hook in this way:
useEffect(() => {
const unsubscribe = db.collection('room')
.where('joinUser', 'array-contains-any', [10])
.onSnapshot((res) => {
// do something...
});
return () => unsubscribe()
}, []);
Try to return just unsubscribe
let unsbscribe;
async function getFirebaseData() {
unsbscribe = db.collection('room')
.where('joinUser', 'array-contains-any', [10])
.onSnapshot((res) => {
// do something...
});
useEffect(() => {
getFirebaseData();
return unsubscribe
}, []);