Come nascondi gli avvisi nel simulatore iOS React Native?


107

Ho appena aggiornato il mio React Native e ora il simulatore iOS ha una serie di avvisi. Oltre a risolverli, come nascondo questi avvisi in modo da poter vedere cosa c'è sotto?

Risposte:


208

Secondo React Native Documentation , puoi nascondere i messaggi di avviso impostando disableYellowBoxin truequesto modo:

console.disableYellowBox = true;

3
questo ha funzionato per me, ma non per le altre risposte che dicevano console.ignoredYellowBox = [...];
sdfsdf

6
Grazie! Questa dovrebbe essere la risposta selezionata.
Sreejith Ramakrishnan

1
Non ho capito, ma dove aggiungi console.disableYellowBox = true?
Michel Arteta

2
@ Mike, in qualsiasi punto del tuo script, quando vuoi disabilitare la casella gialla.
Moussawi7

2
Un buon posto per metterlo è nel costruttore del componente RootContainer!
Fernando Vieira

102

Un modo migliore per nascondere selettivamente determinati avvisi (che vengono visualizzati a tempo indeterminato dopo un aggiornamento all'ultima e migliore versione RN) è impostare console.ignoredYellowBox in un file JS comune nel progetto. Ad esempio, dopo aver aggiornato il mio progetto oggi a RN 0.25.1, ho visto molti ...

Avviso: ReactNative.createElement è deprecato ...

Voglio ancora essere in grado di vedere utili avvisi e messaggi di errore da React-Native, ma voglio eliminare questo particolare avviso perché proviene da una libreria npm esterna che non ha ancora incorporato le modifiche sostanziali in RN 0.25. Quindi nel mio App.js aggiungo questa riga ...

// 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'];

In questo modo ricevo ancora altri errori e avvisi utili per il mio ambiente di sviluppo, ma non vedo più quello in particolare.


Soluzione perfetta per me, sebbene avessi lo stesso avviso "ReactNative.createElement è deprecato".
JD Angerhofer

2
quanto del messaggio di errore dovresti scrivere per ignorarlo?
Soorena

Questa risposta deve essere aggiornata. YelloBox non fa più parte di react-native.
Haidar Zeineddine

17

Per disabilitare il posto scatola gialla

console.disableYellowBox = true; 

ovunque nella tua applicazione. In genere nel file radice, quindi verrà applicato sia a iOS che ad Android.

Per esempio

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

11

Nel tuo file app.js sotto il metodo del ciclo di vita di qualsiasi componente. Come in componentDidmount () devi aggiungere entrambi, escludendo qualsiasi cosa non funzionerà.

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

Non è vero, sta succedendo qualcosa nel tuo progetto. Una riga dice "ignora questo elenco di avvisi" (che è il modo più preciso per farlo), una riga dice "ignora tutti gli avvisi" (che è un modo davvero brusco per farlo). Ad esempio, ho solo la prima riga e sopprime perfettamente i miei avvisi.
Mike Hardy

11

add this line in your app main screen.

console.disableYellowBox = true;


9

Aggiungi il codice seguente nel tuo file 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

Se stai cercando di eseguire rapidamente una demo dell'app.

Se vuoi nasconderli in una build particolare perché stai facendo una demo o qualcosa del genere, puoi modificare il tuo schema Xcode per renderlo una build di rilascio e questi avvisi gialli non verranno visualizzati. Inoltre, la tua app verrà eseguita molto più velocemente.

Puoi modificare lo schema per il tuo simulatore e dispositivo reale procedendo come segue:

  1. In Project in XCode.
  2. Product> Scheme>Edit Scheme...
  3. Cambia Build Configurationda Debuga Release.

1
Dovrebbe essere la risposta accettata. In Release: nessun avviso e app più veloce!
cappie013

2
Non si ottiene alcuna funzionalità di debug inRelease
Phil Andrews

1
@PhilAndrews Sono d'accordo! Non so di aver postato in questo modo quando, ma ci sono abbastanza persone che lo trovano utile che lo lascerò. Devo aver provato a dimostrare l'app a qualcuno e volevo eliminare gli avvisi gialli, nel qual caso, questa è la strada giusta.
Joshua Pinter

5

Per coloro che vengono da questa parte provando a disabilitare gli avvisi rossi dalla console, che danno informazioni assolutamente inutili, a partire dal 17 febbraio, è possibile aggiungere questa riga di codice da qualche parte

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

Disabilita tutto console.error


1
Grazie! Non mi ero nemmeno reso conto che l'errore della mia console era il motivo per cui appariva lo schermo rosso. Ho pensato che qualcosa non andava con try / catch non funzionante: o.
Nick l'

5

console.disableYellowBox = true;

questo ha funzionato per il livello di applicazione Mettilo ovunque nel file index.js


4

Per disabilitare il posto scatola gialla console.disableYellowBox = true; ovunque nella tua applicazione. In genere nel file radice, quindi verrà applicato sia a iOS che ad Android.

Per ulteriori dettagli, consultare il documento ufficiale



1

console.ignoredYellowBox = ["Avviso: ogni", "Avviso: non riuscito"];


1

Ho scoperto che anche quando ho disabilitato avvisi specifici (messaggi di casella gialla) utilizzando i metodi sopra menzionati, gli avvisi erano disabilitati sul mio dispositivo mobile, ma venivano comunque registrati sulla mia console, il che era molto fastidioso e distraeva.

Per evitare che gli avvisi vengano registrati nella tua console, puoi semplicemente sovrascrivere il warnmetodo consolesull'oggetto.

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

È anche possibile disabilitare solo avvisi specifici testando il messaggio fornito:

// 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);
};

Se non puoi (o non vuoi) usare un'espressione regolare per testare la stringa, il indexOfmetodo funzionerà altrettanto bene:

// 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;
}

Tieni presente che questa tecnica filtrerà tutti i messaggi che passano attraverso la warnfunzione indipendentemente da dove provengono. Per questo motivo, fai attenzione a non specificare una lista nera eccessivamente generosa che sopprimerà altri errori significativi che potrebbero provenire da un luogo diverso da React Native.

Inoltre, credo che React Native utilizzi il console.errormetodo per registrare gli errori (messaggi con riquadro rosso), quindi presumo che questa tecnica possa essere utilizzata anche per filtrare errori specifici.


0

Nel tuo file AppDelegate.m puoi modificare questa riga:

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

e sostituire dev=trueda dev=falsealla fine.


0

Correlati: sopprimere gli avvisi Xcode dalla libreria React Native

(ma non per il tuo codice)

perché: quando si inizializza una nuova app RN, il progetto Xcode contiene più di 100 avvisi che distraggono il rumore (ma probabilmente innocuo altrimenti)

soluzione: imposta inibisci tutti gli avvisi su in Impostazioni build per i target pertinenti.

inserisci qui la descrizione dell'immagine

Disabilita gli avvisi in Xcode dai framework

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


anche; per errori logici; vedi "-Xanalyzer -analyzer-disable-all-checks"
Leonard Pauli

La domanda originale riguardava gli avvisi in-app (ad es. Riquadro giallo), ho trovato questa domanda durante il tentativo di ripulire gli avvisi del progetto Xcode. Perché downvote? vedi meta.stackoverflow.com/questions/299352/…
Leonard Pauli

0

Raccomando un piccolo sviluppatore di strumenti del nostro team, raccoglie tutti gli avvisi e gli errori nell'icona fluttuante. Confronta con console.disableYellowBox = true;, puoi ancora vedere dove si trova un avviso o un errore ma non ti disturba. inserisci qui la descrizione dell'immagine Repo Github WT-Console: https://github.com/WeBankFinTech/wt-console

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.