Firebase 停止监听 onAuthStateChanged
Firebase 停止监听 onAuthStateChanged
从版本^3.0.0开始,我很难移除身份验证状态更改监听器。\n根据文档要求启动监听器:\n
firebase.auth().onAuthStateChanged(function (user) { // 处理代码 });
\n然而,我在文档中找不到任何有关移除身份验证状态更改监听器的说明。Firebase.Auth 类中有一个奇怪的函数叫做`removeAuthTokenListener`,但很不幸它没有被记录在文档中(Firebase文档参考链接)。\n通过浏览器的网页控制台:\n
var auth = firebase.auth(); auth.removeAuthTokenListener;
\n会打印一个接受一个参数的函数定义。我尝试了以下操作:\n
this.authListener = firebase.auth().onAuthStateChanged(function (user) {...}); firebase.auth().removeAuthTokenListener(this.authListener);
\n但是那没有起任何作用。
问题出现的原因是React组件在获取用户数据时需要取消订阅,否则每个组件都会出现内存泄漏。解决方法是在组件被卸载时取消订阅。
这里给出了一个使用React的useEffect钩子的示例代码,其中包含了取消订阅的逻辑。代码中使用了一个异步函数getUser来获取用户数据,并通过await关键字等待订阅函数的返回结果,将返回的取消订阅函数赋值给unsubscribe变量。然后在组件被卸载时返回unsubscribe函数,以实现取消订阅的操作。
另外,代码中还给出了另一种尝试的方法,但是并没有成功。作者表示这种方法并没有起作用,但是上述的解决方法对他很有帮助。他提到,由于unsubscribe已经是一个函数,所以只需要将其作为返回值即可进行清理,即"return unsubscribe;"。这种方法比返回一个调用函数的函数更加简洁。
使用useEffect钩子来取消订阅是解决Firebase中onAuthStateChanged函数监听问题的一种常见做法。
根据文档,onAuthStateChanged()函数返回一个用于取消订阅观察者的函数。因此,我们可以通过调用返回的函数来取消订阅,如下所示:
var unsubscribe = firebase.auth().onAuthStateChanged(function (user) {
// 处理代码
});
然后,我们可以通过调用unsubscribe()函数来取消订阅。
有点不好意思...不确定我是怎么忽略了这一点。谢谢。
实际上,我并不知道它是如何工作的,但是对我们的文档有了更多的经验。;-)
如果这是一个愚蠢的问题,对不起,但是为什么一个应用程序会需要取消订阅这个观察者呢?
例如,当用户有意注销并且您不希望再执行监听器时。
firebase v9的文档显示它的工作方式是相同的。