Kannst du alle Fehler einer React.js-App mit einem try / catch-Block abfangen?

8

Ich habe eine Reaction-Anwendung erstellt, die nicht live läuft, und die Leute, die sie benutzen, bemerken, dass gelegentlich ein merkwürdiger Fehler auftritt. Ich weiß nicht warum oder was passiert und kann es nicht reproduzieren.

Ich frage mich also, ob es eine Möglichkeit gibt, die gesamte App oder Teile davon in einen try / catch-Block zu packen, damit ich die Fehler an ein Fehlerprotokoll auf dem Server senden kann?

Alles, was ich bisher gelesen habe, ist, dass Sie die gesamte Render-Funktion in einen try / catch umwandeln könnten, aber das würde aufgrund der Benutzerinteraktion keine Fehler machen, richtig?

    
Flion 29.06.2015, 09:08
quelle

3 Antworten

18

Dies ist, was ich am Ende

verwendet habe %Vor%     
Flion 29.06.2015, 13:08
quelle
15

Sie können Reats BatchingStrategy-API verwenden, um einfach einen try/catch um Ihren gesamten React-Code zu wickeln. Der Vorteil von% window.onerror ist, dass Sie in allen Browsern eine nette Stapelüberwachung erhalten. Selbst moderne Browser wie Microsoft Edge und Safari bieten keine Stack-Traces für window.onerror .

So sieht es mit React 15.4 aus:

%Vor%

Vollständige Beschreibung hier: Ссылка

    
Byron Wong 10.12.2016 21:19
quelle
2

Ich hatte das gleiche Problem. Ich habe eine Office-App erstellt, in der ich weder eine Debug-Konsole noch Entwickler-Tools hatte, sodass ich nicht herausfinden konnte, wo Fehler aufgetreten sind.

Ich habe eine einzelne Komponente (eine es6-Klasse) erstellt, die alle console -Meldungen abgefangen, die Nachricht in einem separaten Array gespeichert und die "echte" Funktion console aufgerufen hat.

%Vor%

Dabei ist Log ein einfacher Wrapper mit einem message und einem type und this._target ist ein Verweis auf window.console . Also habe ich das gleiche mit info , warn und error gemacht.

Zusätzlich habe ich eine Methode handleThrownErrors(message, url, lineNumber) erstellt, um Ausnahmen zu fangen.

%Vor%

Zumindest habe ich eine Instanz der Klasse erstellt (ich habe sie LogCollector genannt) und sie an das Fenster angehängt.

%Vor%

Jetzt habe ich eine reactive-Komponente erstellt, die die logCollector-Instanz ( window.logCollector ) als Eigenschaft erhält. In regelmäßigen Abständen prüft die reagierende Komponente die gesammelten Nachrichten und zeigt sie auf dem Bildschirm an.

%Vor%

this.setInterval() ist eine eigene Funktion, die einfach window.setInterval() aufruft.

Und in render() Methode:

%Vor%
  

HINWEIS : Es ist wichtig, dass LogCollector vor alle anderen Dateien eingefügt wird.

     

HINWEIS : Die obige Lösung als sehr vereinfachte Version. Zum Beispiel: Sie können es verbessern, indem Sie benutzerdefinierte (Nachrichten-) Listener hinzufügen oder 404 Not found -Fehler (für js-Skripte und CSS-Dateien) abfangen.

    
marcel 29.06.2015 09:46
quelle

Tags und Links