Skip to main content

Use a controlled progress bar

Imagine you want to see the progress of a file upload. The example below features axios, but it works with anything!

import axios from 'axios';
import { toast } from 'react-toastify';

function Example(){
// we need to keep a reference of the toastId to be able to update it
const toastId = React.useRef(null);

function handleUpload(){
axios.request({
method: "post",
url: "/foobar",
data: myData,
onUploadProgress: p => {
const progress = p.loaded / p.total;

// check if we already displayed a toast
if (toastId.current === null) {
toastId.current = toast('Upload in Progress', { progress });
} else {
toast.update(toastId.current, { progress });
}
}
}).then(data => {
// Upload is done!
// The remaining progress bar will be filled up
// The toast will be closed when the transition end
toast.done(toastId.current);
})
}

return (
<div>
<button onClick={handleUpload}>Upload something</button>
</div>
)
}