You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React向无状态函数组件传参报错 鼓机按钮无法播放音频

问题原因及修复方案

核心错误:props命名不匹配

你在App组件中给Keyboard组件传递的属性名是play,但Keyboard组件解构参数时用的是playSound,导致playSound实际为undefined,点击时调用不存在的方法就会抛出对象相关错误。

次要规范问题

React中指定元素类名需要用className属性,不能直接用原生HTML的class,避免和JS的class关键字冲突。

可选优化

你的playSound已经使用箭头函数写法,自带this绑定,constructor里的绑定操作可以删除,减少冗余代码。


修复后核心代码

class App extends React.Component {
  playSound = (key) => {
    const audio = document.getElementById(key);
    audio.currentTime = 0;
    audio.play();
  }
  render() {
    // 属性名修改为和Keyboard解构参数一致的playSound
    return(
        <Keyboard playSound={this.playSound}/>
    )
  }
}

const Keyboard = ({playSound}) => {
    return TR66.map(sound => {
        // 把class替换为React规范的className
        return (<button className="drum-pad" id={sound.id} onClick={() => playSound(sound.key)}>
          <audio className="clip" id={sound.key} src={sound.url}/>
            <div>{sound.key}</div>
        </button>)
    });
}

其余TR66数组定义、ReactDOM渲染逻辑、CSS、HTML代码无需修改,调整后点击按钮即可正常触发音频播放。


内容的提问来源于stack exchange,提问作者CP McClure

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 10:54:01