Ich habe 4 span
mit onClick={this.clickhandler}
. Innerhalb der clickhandler
gibt es eine Audio, die ich spielen möchte, wenn Sie darauf klicken. Das Problem ist, ich möchte 4 verschiedene Audio-URLs innerhalb der gleichen clickhandler
. Wie kann ich jede span
mit einer Audio-Zeichenfolge verknüpfen und an dieselbe eventhandler
übergeben?Wie man Requisite an Eventhandler übergibt?
clickhander(e) {
const audio = new Audio('https://s3.amazonaws.com/freecodecamp/simonSound1.mp3');
audio.play()
console.dir(e.target)
}
render() {
return(
<div className="container">
<h1 className="header">Simon Game</h1>
<span onClick={this.clickhander}>
<Heart fill="#555"/>
</span>
<span onClick={this.clickhander}>
<Heart fill="#402" />
</span>
<span onClick={this.clickhander}>
<Heart fill="#f39" />
</span>
<span onClick={this.clickhander}>
<Heart fill="#29f" />
</span>
</div>
)
}
EDIT: Ich habe versucht, die Lösungen unten, aber ich bekomme diese Fehlermeldung: Der Fehler, den Sie nicht einen Stack-Trace versehen enthält.
dies ist mein Code jetzt:
clickhander(e, url) {
const audio = new Audio(url);
audio.play()
console.dir(e.target)
}
render() {
return(
<div className="container">
<h1 className="header">Simon Game</h1>
<span onClick={(e) => this.clickhander(e, "url1")}>
<Heart fill="#555"/>
</span>
<span onClick={(e) => this.clickhander(e, "url2")}>
<Heart fill="#402" />
</span>
<span onClick={(e) => this.clickhander(e, "url3")}>
<Heart fill="#f39" />
</span>
<span onClick={(e) => this.clickhander(e, "url4")}>
<Heart fill="#29f" />
</span>
</div>
)
}
bevorzugen diese Lösung gegenüber anderen Lösungen, die binden oder eine anonyme Funktion verwenden. Sie erstellen bei jedem erneuten Rendern der Komponente eine neue Funktion, bei der die Daten gesammelt und die Anwendung mit der Zeit verlangsamt werden müssen. –