Как отключить onSnapshot Listener? - PullRequest
0 голосов
/ 25 апреля 2020

Я разработал свое приложение с реагированием на натив и использовал Cloud Firestore для базы данных.
Я хотел бы отключить прослушиватель снимков до того, как пользователи выйдут из системы.
Как выполнить unSubscribe(); в не getDataComponent но signOutComponent?

мой код здесь:

// getDataComponent.js
class DataComponent extends React.Component {
  getData(year) {
    const { currentUser } = firebase.auth();
    const db = firebase.firestore();
    const docRef = db.collection(`users/${currentUser.uid}/statics`).doc(`${year}`);
    const unSubscribe = docRef.onSnapshot((doc) => {
      // ...
    }, (err) => {
      // ...
    });
  }
  render() {
    return (
      // ...
    );
  }
}
// signOutComponent.js
class signOut extends React.Component {
  signOut() {

    // I'd like to detach snapshot listner here.

    firebase.auth().signOut()
      .then(() => {
        console.log('signOut success');
      })
      .catch((error) => {
        // ...
      });
  }
  render() {
    return (
      // ...
    );
  }
}

мое окружение:

"expo": "^34.0.0",
"react": "16.8.3",
"react-native": "https://github.com/expo/react-native/archive/sdk-34.0.2.tar.gz",
"firebase": "^7.14.1",

1 Ответ

1 голос
/ 25 апреля 2020

Функция onSnapshot возвращает функцию отмены подписки. вы можете сделать

this.unsubscribe = ref.onSnapshot(...)

и в вашем методе componentWillUnmount добавить

if(this.unsubscribe) {
this.unsubscribe();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...