I am trying to implement IGV.js with React, and I found that the following code creates two container divs instead of one:
var igvDiv = document.getElementById("igv-div");
var options =
{
genome: "hg38",
locus: "chr8:127,736,588-127,739,371",
tracks: [
{
"name": "HG00103",
"url": "https://s3.amazonaws.com/1000genomes/data/HG00103/alignment/HG00103.alt_bwamem_GRCh38DH.20150718.GBR.low_coverage.cram",
"indexURL": "https://s3.amazonaws.com/1000genomes/data/HG00103/alignment/HG00103.alt_bwamem_GRCh38DH.20150718.GBR.low_coverage.cram.crai",
"format": "cram"
}
]
};
igv.createBrowser(igvDiv, options)
.then(function (browser) {
console.log("Created IGV browser");
})
My react code is this better useing useRef:
import React, { useRef, useEffect, Component } from 'react';
import igv from 'igv';
var igvStyle = {
fontFamily: 'open sans,helveticaneue,helvetica neue,Helvetica,Arial,sans-serif',
paddingTop: '60px',
margin: '5px'
}
class IGViewerSection extends Component {
componentDidMount() {
var igvContainer = document.getElementById('igv-div');
var igvOptions = {
genome: "hg38",
locus: "chr8:127,736,588-127,739,371",
tracks: [
{
"name": "HG00103",
"url": "https://s3.amazonaws.com/1000genomes/data/HG00103/alignment/HG00103.alt_bwamem_GRCh38DH.20150718.GBR.low_coverage.cram",
"indexURL": "https://s3.amazonaws.com/1000genomes/data/HG00103/alignment/HG00103.alt_bwamem_GRCh38DH.20150718.GBR.low_coverage.cram.crai",
"format": "cram"
}
]
};
return igv.createBrowser(igvContainer, igvOptions);
}
render() {
return (
<div id="igv-div" style={igvStyle}></div>
);
}
}
export default IGViewerSection;
I would like to implement IGV.js with React using the correct approach. Could you please guide me on the correct way to implement IGV.js with React, and how to fix
Here is the correct version, you attach your ref object with the
refprop and you can use it when the component is mounted.