gpt4 book ai didi

javascript - 如何取消订阅 React-Native 中的 Firestore 监听器?

转载 作者:行者123 更新时间:2023-12-05 06:18:14 25 4
gpt4 key购买 nike

如何取消订阅 React-Native 中的 Firestore 监听器?我有一个功能,我可以在其中获取和收听 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();

要停止其他函数的监听,你可以这样做:


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

关于javascript - 如何取消订阅 React-Native 中的 Firestore 监听器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61326204/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com