reactjs - 为什么我的 “Audio-Button”不播放声音(onClick)

标签 reactjs audio

我正在努力找出为什么单击按钮时我的按钮不播放声音。 console.log()测试工作正常,但-part无效。我也尝试了一些npm-packets来解决此问题,但似乎我的代码有一个普遍的问题。它出什么问题了?有人能帮我吗?

main.js:

import Button from './button';

class Drumpad extends Component {
  constructor(props) {
    super(props);
        this.state = { 
              Q:
              {
                id: 'Q',
                name: 'Q',
                src: 'https://s3.amazonaws.com/freecodecamp/drums/Heater-1.mp3'
              },
          }
    }
  render() {
    return (
      <div style={test}>
        <div id='row1'>
        <Button cfg={this.state.Q}/>
        </div>
      </div>
    )
  }
}

还有button.js:
class Button extends Component {
  constructor(props) {
    super(props);
    this.state = {
        }
      }
      handleClick = () => {
        console.log(this.props.cfg.src);
        return (
          <audio ref='audioClick' src={this.props.cfg.src} type='audio/mp3' autoPlay>
          );
        };
  render() {

    return (
      <div>
        <button style={buttonStyle} onClick={this.handleClick}>
            <h1>{this.props.cfg.name}</h1>
        </button>
      </div>
    )
  }
}

最佳答案

handleClick中的button.js方法返回一个<audio>元素,该元素是多余的,因为您想播放声音onClick

取而代之的是,我使用Audio构造函数来创建音频剪辑的实例,并使用作为 Prop 提供的url进行设置。

然后,我使用回调在其上调用play()方法。

  handleClick = () => {
    const audio = new Audio(this.props.cfg.src);
    this.setState({ audio }, () => {
      this.state.audio.play();
    });
  };

因此,您的button.js变成了这样的样子:
import React, { Component } from "react";

const buttonStyle = {};

export default class Button extends Component {
  constructor(props) {
    super(props);
    this.state = {
      audio: false
    };
  }

  handleClick = () => {
    console.log(this.props.cfg.src);
    const audio = new Audio(this.props.cfg.src);
    this.setState({ audio }, () => {
      this.state.audio.play();
    });
  };

  render() {
    return (
      <div>
        <button style={buttonStyle} onClick={this.handleClick}>
          <h1>{this.props.cfg.name}</h1>
        </button>
      </div>
    );
  }
}

您的main.js保持不变。

这是一个有效的codesandbox

关于reactjs - 为什么我的 “Audio-Button”不播放声音(onClick),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55766225/

相关文章:

java - 规范化 PCM 数据

pdf - 语音转PDF?

javascript - 使用 Webpack HtmlWebpackPlugin

reactjs - React Hook 延迟了 useEffect 触发?

javascript - 我正在尝试向我的 React Native 应用程序添加字体,但出现未关闭 jsx 标签的错误,但我关闭了所有标签

python - 从 mp3 绘制频谱图

Android 录制音频时出现 SIGSEGV 错误

javascript - enzyme 安装 API 问题 : TypeError: Cannot read property 'find' of undefined

javascript - Safari 剪贴板错误 "TypeError: undefined is not an object"

java - 如何在Java中读取压缩的.wav音频文件?