React Native 警告:从控制台接收警告

Ham*_*iny 21 react-native

我是反应本机新手,当我运行反应本机项目时,我收到此警告或错误。

\n
           ReactNativeJS \xe2\x96\xb6\xef\xb8\x8e 'EventEmitter.removeListener(\\'change\\', ...): Method has\n           been deprecated. Please instead use `remove()` on the subscription returned by \n          `EventEmitter.addListener`. \n
Run Code Online (Sandbox Code Playgroud)\n

小智 17

一旦您确定已弃用的使用发生在您无法控制的依赖项中,就可以消除这些警告。在您App.js或其他地方添加:

import { LogBox } from "react-native";

LogBox.ignoreLogs(["EventEmitter.removeListener"]);
Run Code Online (Sandbox Code Playgroud)

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


Kie*_*ood 11

有一个上游变化,在react-native@0.65.0中,他们弃用了旧的api,转而使用更简洁的名称,因此removeListener()变成了remove().

这意味着您使用的任何调用这些的包都会产生警告,直到它们发布新的包版本来解决这个问题。

您对 Bharat Varma 的评论似乎表明您正在使用https://github.com/react-native-community - 他们很长一段时间没有发布新版本,并且有针对同一问题的公开 Pull 请求(目前尚未解决)。

现在摆脱它的最佳选择是使用patch-package来修改带有上面链接的 PR 修复的节点模块(只需更改removeListener 以删除它们导出的 useDeviceOrientation 挂钩),并使用它直到它们合并修复此问题。


小智 11

根据官方文档,从 React Native Version 0.65+ 开始,removeListener 已被弃用。您现在可以使用remove():

    useEffect(() => {
 const subscription = AppState.addEvenListener('change', ()=>{})
 return () => {
   subscription.remove()
 }
}, [])
Run Code Online (Sandbox Code Playgroud)


小智 5

这里\xe2\x80\x99是如何删除事件监听器的。

\n

const susbcription = EventEmitter.addListener(\xe2\x80\x98change\xe2\x80\x99,some_callback_function)

\n

删除监听器。不是 EventEmitter.removeListener。你这样做

\n

subscription.remove()

\n

  • 不,先生!当我从 @react-native 包导入 useDeviceOrientation 时,我收到此错误。!!! (2认同)