I want to create a simple react drum machine.
I want to render 9 drumpads and play sound on click.
My DrumPad does only render the first key Q and doesn't play a sound.
import * as React from "https://cdn.skypack.dev/react@17.0.1";
import * as ReactDOM from "https://cdn.skypack.dev/react-dom@17.0.1";
const DrumPad = () => {
const pads = [
{
key: "Q",
id: "Heat-1",
url: "https://s3.amazonaws.com/freecodecamp/drums/Heater-1.mp3"
},
{
key: "W",
id: "Heat-2",
url: "https://s3.amazonaws.com/freecodecamp/drums/Heater-2.mp3"
},
{
key: "E",
id: "Heat-3",
url: "https://s3.amazonaws.com/freecodecamp/drums/Heater-3.mp3"
},
{
key: "A",
id: "Heat-4",
url: "https://s3.amazonaws.com/freecodecamp/drums/Heater-4_1.mp3"
},
{
key: "S",
id: "Clap",
url: "https://s3.amazonaws.com/freecodecamp/drums/Heater-6.mp3"
},
{
key: "D",
id: "Open-HH",
url: "https://s3.amazonaws.com/freecodecamp/drums/Dsc_Oh.mp3"
},
{
key: "Z",
id: "Kick-n-Hat",
url: "https://s3.amazonaws.com/freecodecamp/drums/Kick_n_Hat.mp3"
},
{
key: "X",
id: "Kick",
url: "https://s3.amazonaws.com/freecodecamp/drums/RP4_KICK_1.mp3"
},
{
key: "C",
id: "Closed-HH",
url: "https://s3.amazonaws.com/freecodecamp/drums/Cev_H2.mp3"
}
];
for (var i = 0; i < pads.length; i++) {
return (
<div className="drum-pad" id={pads[i].id}>
{pads[i].key}
<audio
id="audio"
src={pads[i].url}
onclick={function() {
const sound = document.getElementById("audio");
sound.play();
}}
/>
</div>
);
}
};
const App = () => {
return (
<div>
<div id="drum-machine">
<DrumPad />
</div>
</div>
);
};
ReactDOM.render(<App />, document.getElementById("root"));