javascript - 如何将 prop 传递给事件处理程序?

标签 javascript reactjs

我有 4 个 spanonClick={this.clickhandler}。在 clickhandler 内部有一个我想在单击时播放的音频。问题是,我想要在同一个 clickhandler 内有 4 个不同的音频 URL。如何将每个 span 与音频字符串关联并将其传递给同一个 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

最佳答案

在 React 中,尝试像组件一样思考。

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>
    );
  }
}

关于javascript - 如何将 prop 传递给事件处理程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44909156/

相关文章:

javascript - 使组件贴在屏幕上并显示一条消息。 react

javascript - 如何在 React 组件中有条件地包含列表元素

javascript - 无法读取未定义的属性 'status' - Mocha Chai

javascript - 访问控制允许来源 : * is set but I still get Origin not allowed

javascript - Angular 2 如何使用驼峰命名法处理属性

javascript - 如何在 React 中更改字体颜色、字体大小和按钮颜色

reactjs - React-leaflet如何重置样式

generics - React 组件的推断通用类型

javascript - JS - 函数执行后延迟重新加载位置

javascript - d3 - 使用 d3 动态创建多列数据