我有4 span
與onClick={this.clickhandler}
。在clickhandler
裏面有一個音頻,我想單擊時播放。問題是,我想要在同一個clickhandler
內的4個不同的音頻網址。我怎樣才能將每個span
與一個音頻字符串關聯,並將它傳遞給相同的eventhandler
?如何將prop傳遞給eventhandler?
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>
)
}
編輯:我嘗試下面的解決方案,但我得到這個錯誤:您所提供的錯誤不包含堆棧跟蹤。
這是我現在的代碼:
class Home extends Component {
constructor(props){
super(props)
}
clickhander(e, url) {
const str = url
const audio = new Audio(String(str));
audio.play()
}
render() {
return(
<div className="container">
<h1 className="header">Simon Game</h1>
<span onClick={this.clickhander.bind(this, "https://s3.amazonaws.com/freecodecamp/simonSound1.mp3")}>
<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>
)
}
}
export default Home
不想該溶液中使用綁定或匿名函數的其他解決方案。每次組件重新呈現時,它們都會創建一個新的函數,這將需要垃圾回收,並隨着時間的推移減慢應用程序的速度。 –