How do I unsubscribe from a Firestore listener in React-Native? I have a function where I am fetching and listening to changes in Firestore:
_fetchPatientsList() {
var query = firestore().collection('Collection').doc().collection('public');
query = query.where('act', '==', 1);
query = query.where('city', '==', this.state.selected_city);
query = query.orderBy('update_time', 'desc');
query = query.limit(10);
query.onSnapshot({
error: (e) => this.setState({ errorMessage: e, refreshingPatients: false }),
next: (querySnapshot) => {
///do something
},
});
}
And I would like to unsubscribe when I log out:
_logOutHandler = () => {
auth()
.signOut()
.then(() => {
console.log('User signed out!')
});
let unsub = firestore().collection('Collection').doc().collection('public').onSnapshot(() => {
});
// Stop listening for changes
unsub();
}
Is this the proper way of doing it?
you have to save a listener reference const unsubRef = query.onSnapshot
use the reference, example:
const unsubRef = query.onSnapshot({
error: (e) => this.setState({ errorMessage: e, refreshingPatients: false }),
next: (querySnapshot) => {
///do something
},
});
//just make it to unsubscribe
unsubRef();
to stop listener on other function, you can make this:
import from ....
//variables
let unsubRef;
// function to stop listener
stopListener = (unsubRef) => {
unsubRef();
};
//save the reference for this query
unsubRef = query.onSnapshot({
error: (e) => this.setState({ errorMessage: e, refreshingPatients: false }),
next: (querySnapshot) => {
///do something
},
});
//other function you want cancel listener
otherFunc = async() => {
// some code
//stop the listener
await this.stopListener(unsubRef);
//signout code
};
you can see more details here: https://rnfirebase.io/firestore/usage#realtime-changes or https://firebase.google.com/docs/firestore/query-data/listen#detach_a_listener
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With