I am trying to create a button that triggers a download of a JSON file. (And please i don't want to use any libraries to achieve this). Thank you.
import Data from '../Data';
let data = Data;
<Button>Download</Button>
I am trying to create a button that triggers a download of a JSON file. (And please i don't want to use any libraries to achieve this). Thank you.
import Data from '../Data';
let data = Data;
<Button>Download</Button>
 
    
     
    
    Triggering browser download from front-end is not reliable.
What you should do is, create an endpoint that when called, will provide the correct response headers, thus triggering the browser download.
Front-end code can only do so much. The 'download' attribute for example, might just open the file in a new tab depending on the browser.
 
    
    Take a look at this solution: How to create a file in memory for user to download, but not through server? I have rewritten their code a bit, but basically for your case, you'd want...
    // Set globals
var mimetype = 'application/json';
var filename = 'yourfile.json';
    // Create Dummy A Element
var a = window.document.createElement('a');
    // createObjectURL for local data as a Blob type
a.href = window.URL.createObjectURL(new Blob([data], {
    encoding: "UTF-8",
    type: mimetype + ";charset=UTF-8",
}));
a.download = filename;
    // Download file and remove dummy element
document.body.appendChild(a);
a.click();
a.remove();
 
    
    You would need to create a file using your data and then create a downloadable link and append it in whichever part of your application you would like to.
 const fileName = "file";
 const json = JSON.stringify(data);
 const blob = new Blob([json],{type:'application/json'});
 const href = await URL.createObjectURL(blob); // Create a downloadable link
 const link = document.createElement('a');       
 link.href = href;
 link.download = fileName + ".json";
 document.body.appendChild(link);   // This can any part of your website
 link.click();
 document.body.removeChild(link);
