React Native警告:接收来自控制台的警告

sf6xfgos  于 2023-01-14  发布在  React
关注(0)|答案(5)|浏览(141)

我是react native的新手,当我运行react native项目时,我收到了这个警告或错误。

ReactNativeJS ▶︎ 'EventEmitter.removeListener(\'change\', ...): Method has
           been deprecated. Please instead use `remove()` on the subscription returned by 
          `EventEmitter.addListener`.
vsdwdz23

vsdwdz231#

一旦你确定在你无法控制的依赖项中发生了不推荐使用的情况,就有可能使这些警告静音。在你的App.js或其他地方添加:

import { LogBox } from "react-native";

LogBox.ignoreLogs(["EventEmitter.removeListener"]);

您必须小心使用它,并且可能在将来的某个时候将其删除,因为它将使所有包含EventEmitter.removeListener的警告静音,即使这些警告对您可能很重要。

5n0oy7gb

5n0oy7gb2#

有一个上游的变化,在react-native@0.65.0中,他们弃用了旧的API,使用了一个更简洁的名称,所以removeListener()变成了remove()
这意味着您使用的任何调用这些的软件包都将产生警告,直到他们发布新的软件包版本来解决这个问题。
你对Bharat Varma的评论似乎暗示你正在使用https://github.com/react-native-community--他们已经很长时间没有发布新版本了,而且有open Pull Requests针对这个问题(目前还没有解决)。
现在最好的解决办法是使用patch-package修改节点模块,并使用上面链接的PR修复(只需更改removeListener,以删除它们导出的useDeviceOrientation钩子),并使用此修复,直到它们合并了对此的修复。

sy5wg1nm

sy5wg1nm3#

根据官方文件,截至React Native Version 0.65+,removeListener已经降价,现在可以使用remove()了:

useEffect(() => {
 const subscription = AppState.addEvenListener('change', ()=>{})
 return () => {
   subscription.remove()
 }
}, [])
6jjcrrmo

6jjcrrmo4#

下面介绍如何删除事件侦听器。
const susbcription = EventEmitter.addListener(‘change’,some_callback_function)
删除监听程序。不删除EventEmitter.removeListener。请执行此操作
subscription.remove()

sqxo8psd

sqxo8psd5#

你可以在编码的时候用这个方法来解决你的问题。修改库代码添加补丁不是很好的选择。

var eventSubscription; 
    useEffect(() => {
        getDarkOrLightMode();
        eventSubscription =  Appearance.addChangeListener(onThemeChange);
        console.log('useEffect in DarkOrLight',eventSubscription);
        return () => {
          console.log("before   ---->  ",  eventSubscription );
          eventSubscription.remove();
          console.log("after   ---->  ",  eventSubscription );
        };
      }, []);

相关问题