如何在React Native iOS模拟器中隐藏警告?


106

我刚刚升级了我的React Native,现在iOS模拟器有很多警告。除了解决它们,我如何隐藏这些警告,以便可以看到下面的内容?

Answers:


207

根据反应本地文档,你可以通过设置隐藏警告消息disableYellowBox,以true这样的:

console.disableYellowBox = true;

3
这对我有用,但不是说console.ignoredYellowBox = [...]的其他答案;
sdfsdf

6
谢谢!这应该是选定的答案。
Sreejith Ramakrishnan

1
抱歉,但是您在哪里添加console.disableYellowBox = true?
米歇尔·阿泰塔

2
@Mike,要禁用黄色框时,脚本中的任何位置。
Moussawi17年

2
放置它的好地方是RootContainer组件的构造函数!
Fernando Vieira

102

有选择地隐藏某些警告(升级到最新和最佳RN版本后会无限期显示)的更好方法是在项目的通用JS文件中设置console.ignoredYellowBox。例如,在将我的项目今天升级到RN 0.25.1之后,我看到了很多...

警告:ReactNative.createElement已弃用...

我仍然希望能够看到来自React-Native的有用警告和错误消息,但是我想挤压这个特定警告,因为它来自尚未整合RN 0.25中重大更改的外部npm库。因此,在我的App.js中,我添加了这一行...

// RN >= 0.63
import { LogBox } from 'react-native';

LogBox.ignoreLogs(['Warning: ...']);

// RN >= 0.52
import {YellowBox} from 'react-native';

YellowBox.ignoreWarnings(['Warning: ReactNative.createElement']);

// RN < 0.52
console.ignoredYellowBox = ['Warning: ReactNative.createElement'];

这样,我仍然得到其他错误和警告,这对我的开发环境很有帮助,但是我不再看到该特定错误。


对我来说是完美的解决方法,尽管我有相同的“ ReactNative.createElement已弃用”警告。
JD Angerhofer,2016年

2
您应该写多少错误信息以忽略它?
Soorena

这个答案需要更新。YelloBox不再是react-native的一部分。
Haidar Zeineddine

17

禁用黄框位置

console.disableYellowBox = true; 

您应用程序中的任何位置。通常在根文件中,因此它将同时适用于iOS和Android。

例如

export default class App extends React.Component {
     render() {
          console.disableYellowBox = true;
          return (<View></View>);
     }
}

11

在任何组件的生命周期方法下的app.js文件中,例如componentDidmount()中,您都必须添加这两者,但任何一项都将不起作用。

console.ignoredYellowBox = ['Warning: Each', 'Warning: Failed'];
console.disableYellowBox = true;

事实并非如此,您的项目正在发生某些事情。一行显示“忽略此警告列表”(这是最精确的方法),一行显示“忽略所有警告”(这是一种非常钝的方法)。例如,我只有第一行,它完美地抑制了我的警告。
Mike Hardy

10

add this line in your app main screen.

console.disableYellowBox = true;


9

index.js文件中添加以下代码

console.disableYellowBox = true;

    import {AppRegistry} from 'react-native';
    import App from './App';
    import {name as appName} from './app.json';

    console.disableYellowBox = true;



AppRegistry.registerComponent(appName, () => App);

7

如果您要快速演示该应用程序。

如果您要在进行演示或其他操作时将它们隐藏在特定的版本中,则可以编辑Xcode方案以使其成为发布版本,并且这些黄色警告不会显示。此外,您的应用程序将运行得更快。

您可以通过执行以下操作为模拟器和真实设备编辑方案:

  1. 在XCode项目中。
  2. Product> Scheme>Edit Scheme...
  3. Build Configuration从更改DebugRelease

1
应该是公认的答案。在Release:无警告,更快的应用程序!
cappie013

2
你没有得到任何调试特征Release
菲尔·安德鲁斯

1
@PhilAndrews我同意!我不知道我何时以这种方式发布信息,但是有足够多的人发现我将其保留有用。我一定一直在尝试向某人演示该应用,并希望摆脱黄色警告,在这种情况下,这是正确的方法。
约书亚·品特

5

对于那些试图通过控制台禁用红色警告的人,这些警告从2002年2月17日开始提供绝对无用的信息,您可以在以下位置添加此行代码

console.error = (error) => error.apply;

全部禁用 console.error


1
谢谢!我什至没有意识到我的控制台错误是红色屏幕弹出的原因。我认为try / catch无法正常工作是有问题的:o。
尼克


4

禁用黄框放置console.disableYellowBox = true;在应用程序中的任何位置。通常在根文件中,因此它将同时适用于iOS和Android。

有关更多详细信息,请检查正式文件




1

我发现,即使我使用上述方法禁用了特定警告(黄框消息),这些警告在我的移动设备上也被禁用,但是它们仍被记录到控制台,这非常令人讨厌和分散注意力。

为了防止将警告记录到控制台,您可以简单地覆盖对象warn上的方法console

// This will prevent all warnings from being logged
console.warn = () => {};

通过测试提供的消息,甚至可以仅禁用特定的警告:

// Hold a reference to the original function so that it can be called later
const originalWarn = console.warn;

console.warn = (message, ...optionalParams) => {
  // Insure that we don't try to perform any string-only operations on
  // a non-string type:
  if (typeof message === 'string') {
    // Check if the message contains the blacklisted substring
    if (/Your blacklisted substring goes here/g.test(message))
    {
      // Don't log the value
      return;
    }
  }

  // Otherwise delegate to the original 'console.warn' function
  originalWarn(message, ...optionalParams);
};

如果您不能(或不想)使用正则表达式来测试字符串,则该indexOf方法将同样有效:

// An index of -1 will be returned if the blacklisted substring was NOT found
if (message.indexOf('Your blacklisted substring goes here') > -1) {
  // Don't log the message
  return;
}

请注意,此技术将过滤通过函数的所有消息,warn无论它们来自何处。因此,请注意不要指定过多的黑名单,以免抑制其他可能源自React Native之外的其他有意义的错误。

另外,我相信React Native使用该console.error方法来记录错误(红色框消息),因此我假设该技术也可以用于滤除特定错误。


0

在您的AppDelegate.m文件中,您可以更改以下行:

jsCodeLocation = [NSURL URLWithString:@"http://localhost:8081/index.ios.bundle?platform=ios&dev=true"];

并在最后替换dev=truedev=false


0

相关:从React Native库抑制Xcode警告

(但不适用于您自己的代码)

原因:初始化新的RN应用时,Xcode项目包含接近100条警告,这些警告分散了噪音(但可能无害)

解决方案:设置禁止所有警告生成设置的相关目标。

在此处输入图片说明

从框架禁用Xcode中的警告

https://github.com/facebook/react-native/issues/11736


也; 逻辑错误;请参阅“ -Xanalyzer -analyzer-disable-all-checks”
Leonard Pauli

最初的问题是关于应用程序内警告(即,黄色框),我在尝试清理Xcode项目警告时发现了这个问题。为什么要投票?看到meta.stackoverflow.com/questions/299352/...
伦纳德圣保利

0

我推荐我们团队的一个小型工具开发人员,它将所有警告和错误收集到浮动图标中。与相比console.disableYellowBox = true;,您仍然可以看到警告或错误在哪里,但不会打扰您。 在此处输入图片说明 WT-Console Github存储库:https : //github.com/WeBankFinTech/wt-console

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.