问题
I\'d like to view my network requests in React Native to help me debug - ideally in the \'Network\' tab of Chrome\'s devtools.
There are some closed issues about this on GitHub (https://github.com/facebook/react-native/issues/4122 and https://github.com/facebook/react-native/issues/934) but I don\'t entirely understand them. It sounds like I need to undo some of React Native\'s polyfills and then run some commands with extra debugging flags, and maybe modify some Chrome security settings? And apparently there are some security issues involved in doing this that might make it a terrible idea, but nobody involved in the thread has explicitly stated what they are.
Could somebody provide a step-by-step guide to getting the Network tab working with React Native, as well as an explanation of the security issues involved in doing so?
回答1:
This is what I've been using in the entry point of my app
const _XHR = GLOBAL.originalXMLHttpRequest ?
GLOBAL.originalXMLHttpRequest :
GLOBAL.XMLHttpRequest
XMLHttpRequest = _XHR
EDIT: frevib linked to more concise syntax below. Thanks frevib!
GLOBAL.XMLHttpRequest = GLOBAL.originalXMLHttpRequest || GLOBAL.XMLHttpRequest;
Explanation:
GLOBAL.originalXMLHttpRequest
refers the the Chrome Dev Tools copy of XHR. It is provided by RN as an escape hatch. Shvetusya's solution will only work if the dev tools are open and thus providing XMLHttpRequest
.
EDIT: You will need to allow cross origin requests when in debugger mode. With chrome you can use this handy plugin.
EDIT: Read about the RN github issue that lead me to this solution
回答2:
I use the following in my app ( Add this in your main app.js entry point file ) :
// 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;
});
};
The best thing is that it also shows the fetch logs in the console as well which are well formatted.
Screenshot:
On the network tab:
回答3:
I use Reactotron for tracking network request.
回答4:
I'm not sure why no one has pointed out this solution so far. Use React Native Debugger - https://github.com/jhen0409/react-native-debugger! It is the best debugging tool for React Native in my opinion and it gives Network Inspection out of the box.
Take a look at these screenshots.
Right click and select 'Enable Network Inspect'
Right click and select 'Enable Network Inspect'
Debug away!
回答5:
I know this is an old question, but there's a much safer way to do this now that does not require disabling CORS or altering the React Native source code. You can use a third party library called Reactotron that not only tracks API calls (using the network plugin), but also can track your Redux store, and Sagas with additional setup:
https://github.com/infinitered/reactotron https://github.com/infinitered/reactotron/blob/master/docs/plugin-networking.md
回答6:
I was able to debug my requests in Chrome by deleting polyfill that React Native provides after importing React Native.
var React = require('react-native');
delete GLOBAL.XMLHttpRequest;
This worked for me for same origin requests. Not sure if you need to disable CORS in Chrome to make it work for cross origin.
回答7:
In the past I used GLOBAL.XMLHttpRequest
hack to track my API requests but sometimes it is very slow and didn't work for assets requests. I decided to use Postman’s proxy
feature to inspect HTTP communication going out from phone. For details look at the official documentation, but basically, there are three easy steps:
- Set up the proxy in Postman
- Check your computer’s IP address(
$ ifconfig
) - Configure HTTP proxy on your mobile device in wifi settings
回答8:
Please be careful with this code.
XMLHttpRequest = GLOBAL.originalXMLHttpRequest ?
GLOBAL.originalXMLHttpRequest : GLOBAL.XMLHttpRequest;
It helps and it's great but it destroys upload. I spend 2 days trying to figure out why uploaded files are sending [object Object] instead of the real file. The reason is a code above.
Use it for regular calls not but for multipart/form-data calls
回答9:
I suggest using Charles to inspect your network requests. It's really good and provide more visibility and allows you to do advanced stuff.
http://charlesproxy.com
回答10:
Add Debugger in the js where you can see the req or response
来源:https://stackoverflow.com/questions/33997443/how-can-i-view-network-requests-for-debugging-in-react-native