簡體   English   中英

如何取消訂閱 React-Native 中的 Firestore 偵聽器?

[英]How do I unsubscribe from a Firestore listener in React-Native?

如何取消訂閱 React-Native 中的 Firestore 偵聽器? 我有一個 function ,我正在獲取並收聽 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();
}

這是正確的做法嗎?

你必須保存一個監聽器引用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();

要停止其他 function 上的偵聽器,您可以這樣做:


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-changeshttps://firebase.google.com/docs/firestore/query-data/listen#detach_a_listener

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM