admin管理员组文章数量:1024186
I have 4 span
with onClick={this.clickhandler}
. Inside the clickhandler
there is an audio which i'd like to play when clicked. The problem is, i want 4 different audio-urls inside the same clickhandler
. How can i associate each span
with an audio-string and pass it to the same eventhandler
?
clickhander(e) {
const audio = new Audio('.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>
)
}
I have 4 span
with onClick={this.clickhandler}
. Inside the clickhandler
there is an audio which i'd like to play when clicked. The problem is, i want 4 different audio-urls inside the same clickhandler
. How can i associate each span
with an audio-string and pass it to the same eventhandler
?
clickhander(e) {
const audio = new Audio('https://s3.amazonaws./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: i tried the solutions below but i get this error: The error you provided does not contain a stack trace.
this is my code now:
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./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
Share
Improve this question
edited Jul 4, 2017 at 15:10
Hyrule
asked Jul 4, 2017 at 14:58
HyruleHyrule
6452 gold badges10 silver badges25 bronze badges
3 Answers
Reset to default 4In React, try to think ponent-like.
app.js
class App extends Component {
audioArr = ['link1', 'link2', 'link3']; // links to songs
render() {
return (
<div className="App">
{this.audioArr.map((link, i) => (
<Player link={link} key={i} />
))}
</div>
)
}
}
Player.js
class Player extends Component {
handleClick = () => {
const audio = new Audio(this.props.link);
audio.play();
};
render() {
return (
<div>
<span onClick={this.handleClick}>
<Heart fill="#29f" />
</span>
</div>
);
}
}
You can pass it as a second parameter to your handler:
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>
)
}
You can use bind()
to attach to the handler what you want
clickhander(val, e) {
console.log("value passed " + val)
}
render() {
return(
<div className="container">
<h1 className="header">Simon Game</h1>
<span onClick={this.clickhander.bind(this, "val1")}>
<Heart fill="#555"/>
</span>
<span onClick={this.clickhander.bind(this, "val2")}>
<Heart fill="#402" />
</span>
<span onClick={this.clickhander.bind(this, "val3")}>
<Heart fill="#f39" />
</span>
<span onClick={this.clickhander.bind(this, "val4")}>
<Heart fill="#29f" />
</span>
</div>
)
}
I have 4 span
with onClick={this.clickhandler}
. Inside the clickhandler
there is an audio which i'd like to play when clicked. The problem is, i want 4 different audio-urls inside the same clickhandler
. How can i associate each span
with an audio-string and pass it to the same eventhandler
?
clickhander(e) {
const audio = new Audio('.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>
)
}
I have 4 span
with onClick={this.clickhandler}
. Inside the clickhandler
there is an audio which i'd like to play when clicked. The problem is, i want 4 different audio-urls inside the same clickhandler
. How can i associate each span
with an audio-string and pass it to the same eventhandler
?
clickhander(e) {
const audio = new Audio('https://s3.amazonaws./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: i tried the solutions below but i get this error: The error you provided does not contain a stack trace.
this is my code now:
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./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
Share
Improve this question
edited Jul 4, 2017 at 15:10
Hyrule
asked Jul 4, 2017 at 14:58
HyruleHyrule
6452 gold badges10 silver badges25 bronze badges
3 Answers
Reset to default 4In React, try to think ponent-like.
app.js
class App extends Component {
audioArr = ['link1', 'link2', 'link3']; // links to songs
render() {
return (
<div className="App">
{this.audioArr.map((link, i) => (
<Player link={link} key={i} />
))}
</div>
)
}
}
Player.js
class Player extends Component {
handleClick = () => {
const audio = new Audio(this.props.link);
audio.play();
};
render() {
return (
<div>
<span onClick={this.handleClick}>
<Heart fill="#29f" />
</span>
</div>
);
}
}
You can pass it as a second parameter to your handler:
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>
)
}
You can use bind()
to attach to the handler what you want
clickhander(val, e) {
console.log("value passed " + val)
}
render() {
return(
<div className="container">
<h1 className="header">Simon Game</h1>
<span onClick={this.clickhander.bind(this, "val1")}>
<Heart fill="#555"/>
</span>
<span onClick={this.clickhander.bind(this, "val2")}>
<Heart fill="#402" />
</span>
<span onClick={this.clickhander.bind(this, "val3")}>
<Heart fill="#f39" />
</span>
<span onClick={this.clickhander.bind(this, "val4")}>
<Heart fill="#29f" />
</span>
</div>
)
}
本文标签: javascriptHow to pass prop to eventhandlerStack Overflow
版权声明:本文标题:javascript - How to pass prop to eventhandler? - Stack Overflow 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://it.en369.cn/questions/1745567487a2156538.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论