Table of Contents
Iniziare con React Native Debugging
React Native è diventato uno dei framework più ampiamente adottati per la costruzione di applicazioni mobili cross-platform, sfruttando JavaScript e React per fornire esperienze native-like. Debugging è una abilità fondamentale che influisce direttamente sulla velocità di sviluppo e sulla qualità delle app. Se sei un nuovo arrivato o uno sviluppatore esperto, la comprensione dell'ecosistema di debug disponibile in React Native ti aiuterà a identificare i problemi più velocemente, ridurre il tempo speso per la riproduzione di bug, e gli strumenti di profondità
Prima di immergersi in strumenti specifici, aiuta a configurare il vostro ambiente di sviluppo per un debug ottimale. Assicurarsi di avere l'ultima versione di React Native installato, come le nuove versioni spesso includono debugging miglioramenti e deprecazioni di metodi obsoleti. Per iOS, utilizzando un dispositivo reale con una connessione USB può rivelare problemi che simulatori oscura, mentre l'emulatore di Android offre ricche funzioni di debug attraverso ADB logging.
Strumenti di sviluppo Chrome: il classico cavallo da lavoro di debug
Gli strumenti di sviluppo Chrome (DevTools) sono stati un punto di forza nel debug di React Native sin dai primi giorni del framework. Quando si abilita il debug dal menu di sviluppo, il codice JavaScript dell'applicazione viene eseguito all'interno di Chrome, permettendo di utilizzare la suite completa di funzioni DevTools. Questo metodo funziona stabilendo una connessione WebSocket tra l'app React Native e Chrome, in modo da poter controllare gli elementi, le richieste di rete di interferenze di setpoint.
Attivazione di Chrome DevTools in React Native
Per iniziare a debug con Chrome DevTools:
- Apri l'app React Native su un emulatore o dispositivo fisico.
- Aprire il menu Sviluppatore agitando il dispositivo o premendo ]Cmd+D (iOS) / ]Cmd+M[ (Android).
- Seleziona “Debug” (o “Debug JS Remotely” nelle versioni precedenti). Una nuova scheda Chrome si aprirà con l'interfaccia DevTools.
- In Chrome, premere Cmd+Option+I[ (Mac) o [Ctrl+Shift+I[ (Windows/Linux) per aprire DevTools se non appare automaticamente.
Una volta collegato, è possibile utilizzare i seguenti pannelli in modo efficace:
- Elements[]: Mentre non è ricco come strumenti di ispettore nativo, il pannello Elements mostra un albero DOM semplificato delle tue viste React Native.
- Console[]: Visualizza i log da [, []], e [. La console valuta anche le espressioni JavaScript nel contesto della tua app.
- Fonte[]: Impostare punti di rottura, passare attraverso il codice e ispezionare stack di chiamate.
- Network[]: Monitorare le richieste HTTP e WebSocket fatte dalla tua app.
- Performance[]]: Registrare e analizzare le prestazioni runtime, tra cui FPS, uso della memoria e tempo di esecuzione JavaScript.
Tuttavia, tenere a mente che Chrome DevTools debugging introduce una leggera overhead perché il JavaScript funziona nel motore V8 Chrome piuttosto che nel motore JavaScript nativo (Hermes o JSC). Ciò significa che alcuni bug che appaiono solo sul motore nativo non possono riprodurre in Chrome. Per problemi critici, sempre verificare su un dispositivo reale con debug nativo abilitato.
React Debugger Nativo: Redux integrato e React DevTools
React Native Debugger è un'applicazione desktop standalone che riunisce React DevTools e Redux DevTools in un'unica interfaccia, sviluppatore-friendly.Elimina la necessità di passare tra diversi strumenti e fornisce una visione unificata di componenti, cambiamenti di stato e azioni Redux. Questo strumento è particolarmente utile per progetti che utilizzano Redux per la gestione dello stato, in quanto offre il debugging di viaggio e lo stato diffing.
Impostazione di React Debugger nativo
Per utilizzare React Native Debugger:
- Scarica l'ultima versione dal ufficiale repository GitHub[] e installarla sulla tua macchina.
- Eseguire l'applicazione React Native Debugger prima di iniziare l'app React Native, che ascolterà automaticamente la porta 8081 (o la porta predefinita del bundler Metro).
- Apri il menu Sviluppatore della tua app e seleziona "Debug" o, se hai un debugger personalizzato configurato, "Debug con React Native Debugger". L'applicazione si connette alla finestra di debugger.
- L'interfaccia combina un pannello sinistro per React DevTools (albero composto) e un pannello destro per Redux DevTools (registrato di azione, ispettore di stato).
Oltre ai due DevTools, React Native Debugger include anche una console integrata, un ispettore di rete e un ispettore di elementi simili a Chrome DevTools. Supporta punti di rottura e variabili di orologio, rendendolo un ambiente di debugging completo. Perché gestisce il JavaScript nel motore V8 di Electron, condivide la stessa limitazione di Chrome DevTools per i problemi Hermes-specific.
Quando utilizzare React Debugger nativo sopra Chrome DevTools
Se il vostro progetto si basa fortemente su Redux o MobX, gli strumenti di gestione integrata di React Native Debugger sono un cambia-gioco. È possibile rifare azioni, ispezionare diffs di stato e di esportazione in qualsiasi punto. Per gli sviluppatori che preferiscono una finestra separata dedicata esclusivamente a debugging senza distrazioni da altre schede Chrome, questo strumento offre un flusso di lavoro più pulito.
Flipper: la piattaforma di debug nativo ufficiale
Flipper è una piattaforma open source sviluppata da Meta (ex Facebook) per la debugging delle applicazioni mobili. È stato adottato come strumento di debugging predefinito per React Native nella versione 0.62 e fornisce un ricco ecosistema plugin. Flipper funziona in nativo accanto a iOS e applicazioni Android, offrendo funzionalità come ispezione layout, registrazione di rete, report crash e navigazione del database.
Installazione e configurazione del Flipper
Per impostare Flipper per il vostro progetto React Native:
- Scarica Flipper dal ufficiale Flipper sito web[[].
- Assicurare che la versione React Native sia 0.62 o successiva (o aggiungere manualmente le dipendenze Flipper al tuo progetto). Per i nuovi progetti creati con , Flipper è incluso per impostazione predefinita.
- Eseguire la vostra applicazione su un emulatore o dispositivo. Flipper dovrebbe rilevare automaticamente l'applicazione una volta che inizia. Su alcuni emulatori Android, potrebbe essere necessario eseguire per consentire la comunicazione.
- Se Flipper non si connette, verificare che il pacchetto sia collegato nel vostro e .
Plugin chiave Flipper per il nativo di correzione
- Ispettore di layout[: Clicca su qualsiasi elemento dell'interfaccia utente sul dispositivo per vedere il suo nome componente, gli stili, la gerarchia del figlio genitore e le coordinate assolute. Questo è molto più potente del pannello Elementi di Chrome perché funziona con le viste native.
- Network Plugin[[]: Visualizza tutte le richieste di rete fatte dalla tua app, inclusi intestazioni, payload e tempistiche. Puoi filtrare, cercare e rifare le richieste. Questo plugin mostra anche richieste fallite e codici di errore.
- ]Logs Plugin[: Centralizza , logcat Android e iOS NSLog voci. I log sono codificati a colori per livello di registro e possono essere filtrati per tag.
- Crash Reporter Plugin[[]: Cattura i crash nativi e le tracce di stack JavaScript, fornendo una linea temporale di eventi che portano allo schianto.
- Hermes Debugger Plugin[[[]: Se si utilizza Hermes come motore JavaScript, questo plugin consente di debug con punti di rottura, step-over e ispezione variabile direttamente sul dispositivo. Questo è il modo più affidabile per debug Hermes-specific questioni.
- Database Plugin[[]: Sfoglia e modifica i database SQLite che la tua app utilizza durante lo sviluppo, rendendo più facile verificare la persistenza dei dati.
L’architettura plugin di Flipper consente anche plugin personalizzati. I team spesso creano plugin per visualizzare lo stato delle app interne, le risposte dei server di mock o gli eventi di analisi dei registri. Questa flessibilità rende Flipper lo strumento di debugging più a prova di futuro nell’ecosistema React Native.
Risultato delle prestazioni e debug della memoria
Oltre a correggere errori logici, il debug delle prestazioni è fondamentale per offrire un'esperienza utente fluida. React Native fornisce diversi modi per profilare le prestazioni della tua app.
Utilizzo del Monitor di Performance Nativa React
Il menu Sviluppatore include un'opzione "Mostra monitor Perf" che sovrappone un piccolo grafico sulla parte superiore della tua app.
- FPS[]: Cornici al secondo. Un'esperienza fluida dovrebbe mantenere 60 FPS (o 90/120 su dispositivi ad alta frequenza di aggiornamento).
- JS FPS[]: La velocità del frame del thread JavaScript. Se questo dovesse cadere, il codice JavaScript potrebbe essere bloccando il thread principale.
- Uso RAM[]: consumo approssimativo di memoria dell'app.
- Visualizza il conte[]: Il numero di visualizzazioni native attualmente montate.
Utilizzare questo monitor come un primo indicatore che qualcosa è sbagliato, quindi utilizzare più strumenti granulari per individuare la causa.
Profiling con Chrome DevTools Performance Tab
Quando si debug in remoto con Chrome DevTools, la scheda Performance può registrare una linea temporale della esecuzione JavaScript, comprese le chiamate di funzione, i layout e gli eventi di vernice.
- Aprire i Chrome DevTools collegati alla vostra app.
- Vai alla scheda Performance e fai clic sul pulsante di registrazione.
- Interagisci con la tua app per riprodurre il problema delle prestazioni.
- Smettere di registrare e analizzare il grafico della fiamma. Cercare funzioni di lunga durata, layout frequenti, o re-renders eccessivi.
Tuttavia, poiché il JavaScript funziona in Chrome, i numeri di prestazioni (soprattutto la memoria) possono differire dal dispositivo reale. Per la profilazione di produzione, utilizzare il plugin Performance di Flipper o gli strumenti di performance React Native standalone come .
Memoria Debugging con Xcode e Android Studio
Per perdite di memoria nativo, utilizzare strumenti specifici per la piattaforma:
- Xcode Instruments (iOS)[]: Eseguire la tua app in Xcode, quindi utilizzare gli strumenti Leaks e Allocations per rilevare oggetti conservati e la crescita della memoria.
- Android Studio Profiler (Android)[]: Aprire la scheda Profiler quando si esegue l'applicazione su un emulatore o dispositivo.
Questi strumenti sono indispensabili quando si debuggono problemi che appaiono solo dopo l'uso prolungato dell'app, come perdite di memoria da ascoltatori non rimossi o componenti non montati.
Scenari e soluzioni di debug comuni
Anche con strumenti potenti, sapendo come affrontare problemi specifici accelera la risoluzione. Ecco alcuni problemi frequenti incontrati durante lo sviluppo React Native e come debug.
“Impossibile risolvere il modulo” Errori
Questo spesso si verifica quando manca un pacchetto o c'è una versione sbagliata. Controlla il tuo e assicura che tu abbia eseguito [ o . Se il modulo è un file locale, controlla il percorso di importazione. Utilizzare il messaggio di errore del bundler Metro per vedere quale file non è in esecuzione.
Schermo a vuoto sul lancio dell'app
Con Chrome DevTools o React Native Debugger, aprire il pannello Console per visualizzare il messaggio di errore. Le cause comuni includono errori di sintassi, mancanti , o collegamento di moduli nativi errato. Se l'errore è nativo (ad esempio, un Pod mancante), la console del dispositivo o il plugin di log di Flipper mostrerà i dettagli.
Stato non aggiornato come previsto
Utilizzare React DevTools (sia in React Native Debugger o Chrome DevTools con l'estensione strumenti React sviluppatore) per controllare l'albero dei componenti e controllare lo stato attuale e gli oggetti di scena. Per le applicazioni Redux, aprire il pannello Redux DevTools e confrontare l'azione inviata con il diff di stato previsto.
Lentezza di scorrimento
Controllare il Monitor di Performance Nativa di React per le gocce di FPS. Poi il profilo con Chrome DevTools per vedere quali componenti ri-ri-render frequentemente. Usa , , o per evitare aggiornamenti inutili. Per grandi liste, utilizzare con [[FLT20:19] FLT] o
Integrare Debugging nel flusso di lavoro di sviluppo
Gli strumenti di debug sono più efficaci quando vengono utilizzati costantemente durante il ciclo di sviluppo, non solo quando appare un bug.
Impostazione della gestione automatica degli errori
Utilizzare i limiti di errore nei componenti React per catturare gli errori JavaScript con grazia e registrarli in un sistema come Sentry o Bugsnag. Durante lo sviluppo, è possibile reindirizzare questi log a Flipper o alla console in modo da catturare i problemi in anticipo.
Scrivere Testable e Codice Debuggable
Quando si verifica un problema, puoi riprodurlo rapidamente in un ambiente di prova senza l'applicazione completa. Strumenti come Jest e React Native Testing Library completano i tuoi sforzi di debug catturando regressioni prima che raggiungano la produzione.
Utilizzare il ricaricamento caldo e il raffreddamento veloce
React Native’s Fast Refresh (attivato per impostazione predefinita nelle versioni recenti) consente di visualizzare immediatamente le modifiche senza perdere lo stato dell’app. Tuttavia, può nascondere i problemi che si verificano solo su un nuovo avvio dell’app.
Test automatizzato di levaggio con debugging
Combinare il debug con test automatizzati utilizzando strumenti come Detox o Appium per test end-to-end. Quando un test e2e fallisce, utilizzare lo strumento di screenshot di Flipper per catturare lo stato dell'interfaccia utente al momento del fallimento, o integrare con Flipper per mettere in pausa i guasti di prova per l'ispezione manuale.
Debug di integrazione continua
Nelle tubazioni CI/CD, il debugging può essere stimolante perché non c'è un'interfaccia interattiva. Utilizzare i comandi e per trasmettere i log, o catturare i registri Flipper programmaticamente utilizzando il SDK Flipper. Impostare il tuo CI per memorizzare i registri di crash e gli screenshot come artefatti per l'analisi post-build.
Il tuo programma di debug
Hermes, il motore JavaScript ottimizzato per React Native, è ora il default per nuovi progetti. Flipper’s Hermes Debugger plugin è in costante miglioramento, e il team Flipper sta aggiungendo funzionalità come l’importazione di database e la richiesta di rete mocking. Nel frattempo, lo strumento standalone React DevTools è in fase di deprecazione a favore del plugin di Flipper Reols.
Tieni d'occhio il funzionario React Native Debugging documentazione[] per gli aggiornamenti. Inoltre, controlla il Flipper sito web[[]] per nuovi plugin e miglioramenti.
Grazie alla mastering di strumenti come Chrome DevTools, React Native Debugger e Flipper, e adottando una mentalità proattiva di debugging, puoi accorciare notevolmente i tuoi cicli di sviluppo e produrre applicazioni React Native più robuste. Il debugging non è solo per il fissaggio di bug, è una pratica essenziale che affiora la tua comprensione del framework e porta a un codice più pulito e manutentivo.