I want is to show a progressbar while Axios is getting my requests. axios
package has both onDownloadProgress
and onUploadProgress
to show a progressbar during download or upload, but no progress bar during get request. I've searched a lot of questions and articles but they are always about download/upload progress or for Vue.js and I fail to understand how to do it in React.
I have the following code down below (which will not work because I'm not downloading).
Ideally, I'd write it myself; but I'm willing to consider using axios-progress package if someone could explain me how I'd integrate the loadProgressBar()
with my Axios request.
request = () => {
this.setState({error: null, results: []})
axios({
method: 'get',
url: process.env.REACT_APP_API_LOCALS,
responseType: 'json',
onDownloadProgress: (progressEvent) => {
var percentCompleted = Math.round((progressEvent.loaded * 100) / progressEvent.total);
this.setState({
loading: percentCompleted
})
},
})
.then(
(response) => {
console.log(response)
this.setState({
results: response.data.results,
error: null,
totalPages: Math.ceil(response.data.count / response.data.results.length)
})
}
)
.catch(
(error) => {
this.setState({
loading: null,
error: true
})
}
);
}
Axios Get Request get() method is used to make an HTTP get request. There are two parameters that must be passed to the Axios get() method. It first requires the service endpoint's URI. Second, an object containing the properties we wish to send to our server API should be supplied to it.
Once you make a request, Axios returns a promise that will resolve to either a response object or an error object.
To perform an HTTP POST request in Axios, call axios. post() . Making a POST request in Axios requires two parameters: the URI of the service endpoint and an object that contains the properties you wish to send to the server. For a simple Axios POST request, the object must have a url property.
Here's what worked for me in React:
const client = axios.create({
baseURL: 'http://localhost:10000/v1/client',
timeout: 20000
})
let result = await client.get('/fetchMeSomething', {
onDownloadProgress: progressEvent => {
const total = parseFloat(progressEvent.currentTarget.responseHeaders['Content-Length'])
const current = progressEvent.currentTarget.response.length
let percentCompleted = Math.floor(current / total * 100)
console.log('completed: ', percentCompleted)
}
})
.then(res => {
console.log("All DONE: ", res.headers)
return res.data
})
axios
.get("download something", {
onDownloadProgress: (progressEvent) => {
let downloadCount = DownloadCount(
progressEvent.timeStamp,
progressEvent.total,
progressEvent.loaded
);
let percentCompleted = Math.round(
(progressEvent.loaded * 100) / progressEvent.total
);
setProgressing(percentCompleted);
dispatch({
type: "downloading",
payload: downloadCount.toFixed(1),
});
},
})
.then((response) => {})
.catch((error) => {
console.log(error);
});
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With