J'aimerais visualiser mes requêtes réseau dans React Native pour m'aider à déboguer - idéalement dans l'onglet "Réseau" de l'outil de développement de Chrome.
Il y a quelques problèmes résolus à ce sujet sur GitHub ( https://github.com/facebook/react-native/issues/4122 et https://github.com/facebook/react -native/issues/934 ) mais je ne les comprends pas tout à fait. Il semblerait que j’ai besoin d’annuler une partie de React Polyfills de Native, puis d’exécuter des commandes avec des indicateurs de débogage supplémentaires et éventuellement de modifier certains paramètres de sécurité Chrome? Et, apparemment, certains problèmes de sécurité liés à cette opération pourraient en faire une idée terrible, mais aucun des acteurs impliqués dans le fil n’a explicitement déclaré ce qu’ils étaient.
Quelqu'un pourrait-il fournir un guide étape par étape pour que l'onglet Réseau fonctionne avec React Native, ainsi qu'une explication des problèmes de sécurité qui y sont associés?
Voici ce que j'ai utilisé dans le point d'entrée de mon application
const _XHR = GLOBAL.originalXMLHttpRequest ?
GLOBAL.originalXMLHttpRequest :
GLOBAL.XMLHttpRequest
XMLHttpRequest = _XHR
EDIT: frevib lié à une syntaxe plus concise ci-dessous. Merci Frevib!
GLOBAL.XMLHttpRequest = GLOBAL.originalXMLHttpRequest || GLOBAL.XMLHttpRequest;
Explication:
GLOBAL.originalXMLHttpRequest
fait référence à la Chrome Outils de développement de XHR. Elle est fournie par RN sous forme de trappe d’échappement. La solution de Shvetusya ne fonctionnera que si les outils de développement sont ouverts et fournissent ainsi XMLHttpRequest
.
EDIT: Vous devez autoriser les demandes d’origine croisée en mode débogueur. Avec chrome vous pouvez utiliser ce plugin pratique .
EDIT: Lisez à propos du problème RN github qui m'a conduit à cette solution
J'utilise les éléments suivants dans mon application (ajoutez ceci dans votre fichier de point d'entrée principal app.js):
// To see all the requests in the chrome Dev tools in the network tab.
XMLHttpRequest = GLOBAL.originalXMLHttpRequest ?
GLOBAL.originalXMLHttpRequest :
GLOBAL.XMLHttpRequest;
// fetch logger
global._fetch = fetch;
global.fetch = function (uri, options, ...args) {
return global._fetch(uri, options, ...args).then((response) => {
console.log('Fetch', { request: { uri, options, ...args }, response });
return response;
});
};
La meilleure chose à faire est qu’il affiche également les journaux d’extraction dans la console, qui sont bien formatés.
Capture d'écran:
Sur l'onglet réseau:
J'utilise Reactotron pour suivre la demande du réseau.
Je sais que c’est une vieille question, mais il existe un moyen beaucoup plus sûr de le faire qui ne nécessite pas de désactiver CORS ni de modifier le code source React). Vous pouvez utiliser une bibliothèque tierce appelée Reactotron. qui suit non seulement les appels d'API (à l'aide du plugin réseau), mais aussi le suivi de votre magasin Redux et de Sagas avec une configuration supplémentaire:
https://github.com/infinitered/reactotronhttps://github.com/infinitered/reactotron/blob/master/docs/plugin-networking.md
Je ne suis pas sûr de savoir pourquoi personne n'a signalé cette solution jusqu'à présent. Utilisez React Native Debugger - https://github.com/jhen0409/react-native-debugger ! C’est le meilleur outil de débogage pour React Natif à mon avis et cela donne l’inspection du réseau hors de la boîte.
Jetez un coup d'œil à ces captures d'écran.
Faites un clic droit et sélectionnez "Activer Network Inspect"
Faites un clic droit et sélectionnez "Activer Network Inspect"
J'ai pu déboguer mes demandes dans Chrome en supprimant polyfill que React Native fournit après l'importation React Native.
var React = require('react-native');
delete GLOBAL.XMLHttpRequest;
Cela a fonctionné pour moi pour les mêmes demandes d'origine. Vous ne savez pas si vous devez désactiver CORS dans Chrome pour que cela fonctionne avec cross Origin.
Dans le passé, j'ai utilisé GLOBAL.XMLHttpRequest
hack pour suivre mes requêtes d'API mais parfois c'est très lent et cela ne fonctionnait pas pour les requêtes d'actifs. J'ai décidé d'utiliser Postman’s proxy
fonction pour inspecter les communications HTTP sortant du téléphone. Pour plus de détails, regardez documentation officielle , mais, en gros, il y a trois étapes faciles:
$ ifconfig
)S'il vous plaît soyez prudent avec ce code.
XMLHttpRequest = GLOBAL.originalXMLHttpRequest ?
GLOBAL.originalXMLHttpRequest : GLOBAL.XMLHttpRequest;
Ça aide et c'est génial mais ça détruit le téléchargement. Je passe 2 jours à essayer de comprendre pourquoi les fichiers téléchargés envoient [objet Objet] au lieu du fichier réel. La raison est un code ci-dessus.
Utilisez-le pour les appels normaux, mais pas pour les appels multipart/form-data
Je suggère d'utiliser Charles pour inspecter vos demandes de réseau. C'est vraiment bon et donne plus de visibilité et vous permet de faire des choses avancées.