Як ви приховуєте попередження в симуляторі React Native iOS?


107

Я щойно модернізував свій React Native, і тепер симулятор iOS має купу попереджень. Як виправити їх, як приховати ці попередження, щоб я побачив, що знаходиться внизу?

Відповіді:


208

Згідно Реагувати Native документації , ви можете приховати попереджувальні повідомлення, встановивши , disableYellowBoxщоб , trueяк це:

console.disableYellowBox = true;

3
це працювало для мене, але не інші відповіді, які говорили console.ignoredYellowBox = [...];
sdfsdf

6
Дякую! Це має бути обрана відповідь.
Sreejith Ramakrishnan

1
Вибачте, але куди ви додаєте console.disableYellowBox = true?
Мішель Артета

2
@Mike, будь-яке місце у вашому сценарії, коли ви хочете відключити жовте поле.
Moussawi7

2
Гарне місце, щоб розмістити його, є конструктором компонента RootContainer!
Фернандо Віейра

102

Кращий спосіб вибірково приховати певні попередження (які нескінченно з’являються після оновлення до останньої та найкращої версії RN) - встановити console.ignoredYellowBox у загальному файлі JS у вашому проекті. Наприклад, після модернізації свого проекту сьогодні до 0,25,1 RN я бачив багато ...

Попередження: ReactNative.createElement застарілий ...

Я все ще хочу бачити корисні попередження та повідомлення про помилки від React-Native, але я хочу скасувати це особливе попередження, оскільки воно надходить із зовнішньої бібліотеки npm, яка ще не включила остаточні зміни в RN 0,25. Тож у своєму 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

2
скільки повідомлення про помилку слід написати, щоб ігнорувати його?
Соорена

Ця відповідь потребує оновлення. YelloBox вже не є членом реагуючих.
Гайдар Зейнеддін

17

Щоб вимкнути жовте поле

console.disableYellowBox = true; 

в будь-якій точці вашої програми. Зазвичай у кореневому файлі, тому він застосовуватиметься як до iOS, так і до Android.

Наприклад

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

11

У вашому файлі app.js відповідно до методу життєвого циклу будь-якого компонента, як у компонентDidmount (), ви повинні додати їх обоє, виключаючи будь-які, не буде працювати.

console.ignoredYellowBox = ['Warning: Each', 'Warning: Failed'];
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від на Debugдо Release.

1
Повинна бути прийнята відповідь. В Release: без попередження, і швидше додаток!
cappie013

2
У вас немає жодних функцій налагодженняRelease
Філ Ендрюс

1
@PhilAndrews Я згоден! Я не знаю, що я опублікував цей шлях назад, коли є достатньо людей, які вважають корисними, що я залишу це. Я, мабуть, намагався демонструвати додаток комусь і хотів позбутися жовтих попереджень; в такому випадку це правильний шлях.
Джошуа Пінтер

5

Для тих, хто йде таким чином, намагаючись відключити червоні попередження від консолі, які дають абсолютно марну інформацію, станом на feb / 17, ви можете десь додати цей рядок коду

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

Відключає всіх console.error


1
Дякую! Я навіть не усвідомлював, що помилка моєї консолі була причиною появи червоного екрану. Я подумав, що щось не так, коли спробу / лов не працює: o.
Нік

5

console.disableYellowBox = true;

це працювало на рівні програми. Помістіть його де-небудь у файл index.js


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=trueна dev=falseкінці.


0

Пов'язане: Придушити попередження Xcode з бібліотеки React Native

(але не для власного коду)

чому: при ініціалізації нового додатка RN проект Xcode містить ближче до 100 попереджень, які відволікають шум (але, мабуть, нешкідливий інакше)

Рішення: встановити заборонні всі попередження в так під параметрами збірки для відповідних цілей.

введіть тут опис зображення

Вимкнення попереджень у Xcode із фреймворків

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


також; для логічних помилок; дивіться "-Xanalyzer -analyzer-ones-all-check"
Леонард Паулі

Оригінальне запитання стосувалось попередження в додатку (тобто жовтого поля), я знайшов це питання при спробі очищення попереджень проекту Xcode. Чому зворотний голос? дивіться meta.stackoverflow.com/questions/299352/…
Леонард Паулі

0

Я рекомендую невеликий розробник інструментів нашої команди, він збирає всі попередження та помилки у піктограму поплавця. Порівняйте з console.disableYellowBox = true;, ви все ще можете побачити, де є попередження або помилка, але це не турбує вас. введіть тут опис зображення WT-Console Github Repo: https://github.com/WeBankFinTech/wt-console

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.