Как отписаться от слушателя Firestore в React-Native? - PullRequest
0 голосов
/ 20 апреля 2020

Как мне отписаться от слушателя Firestore в React-Native? У меня есть функция, где я получаю и слушаю изменения в 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      
            },
        });
 }

И я хотел бы отписаться, когда я выхожу из системы:

    _logOutHandler = () => {
    auth()
        .signOut()
        .then(() => {
            console.log('User signed out!')
        });
    let unsub = firestore().collection('Collection').doc().collection('public').onSnapshot(() => {
    });

    // Stop listening for changes
    unsub();
}

Это правильный способ делать это?

1 Ответ

0 голосов
/ 20 апреля 2020

Вы должны сохранить ссылку на слушателя const unsubRef = query.onSnapshot

использовать ссылку, например:

const unsubRef = query.onSnapshot({
 error: (e) => this.setState({ errorMessage: e, refreshingPatients: false }),
 next: (querySnapshot) => {
   ///do something      
 },
});

//just make it to unsubscribe
unsubRef();

, чтобы остановить слушателя на другой функции, вы можете сделать это:


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
};

Вы можете увидеть более подробную информацию здесь: https://rnfirebase.io/firestore/usage#realtime -мены или https://firebase.google.com/docs/firestore/query-data/listen#detach_a_listener

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...