当前位置:首页 > React

react如何播放音乐

2026-01-24 23:23:10React

使用 HTML5 Audio 元素

在 React 中播放音乐可以通过 HTML5 的 <audio> 元素实现。创建一个状态来控制音频的播放和暂停。

import React, { useState, useRef } from 'react';

function AudioPlayer() {
  const [isPlaying, setIsPlaying] = useState(false);
  const audioRef = useRef(null);

  const togglePlay = () => {
    if (isPlaying) {
      audioRef.current.pause();
    } else {
      audioRef.current.play();
    }
    setIsPlaying(!isPlaying);
  };

  return (
    <div>
      <audio ref={audioRef} src="your-music-file.mp3" />
      <button onClick={togglePlay}>
        {isPlaying ? 'Pause' : 'Play'}
      </button>
    </div>
  );
}

export default AudioPlayer;

使用第三方库 react-audio-player

对于更复杂的需求,可以使用 react-audio-player 库。安装后直接引入组件即可。

npm install react-audio-player
import React from 'react';
import ReactAudioPlayer from 'react-audio-player';

function AudioPlayer() {
  return (
    <ReactAudioPlayer
      src="your-music-file.mp3"
      controls
    />
  );
}

export default AudioPlayer;

使用 Web Audio API

Web Audio API 提供更底层的音频控制,适合需要高级功能的场景。

import React, { useState, useEffect } from 'react';

function AudioPlayer() {
  const [audioContext, setAudioContext] = useState(null);
  const [source, setSource] = useState(null);
  const [isPlaying, setIsPlaying] = useState(false);

  useEffect(() => {
    const context = new (window.AudioContext || window.webkitAudioContext)();
    setAudioContext(context);
    return () => context.close();
  }, []);

  const togglePlay = async () => {
    if (isPlaying) {
      source.stop();
      setIsPlaying(false);
    } else {
      const res = await fetch('your-music-file.mp3');
      const buffer = await res.arrayBuffer();
      const decodedBuffer = await audioContext.decodeAudioData(buffer);
      const newSource = audioContext.createBufferSource();
      newSource.buffer = decodedBuffer;
      newSource.connect(audioContext.destination);
      newSource.start();
      setSource(newSource);
      setIsPlaying(true);
    }
  };

  return (
    <button onClick={togglePlay}>
      {isPlaying ? 'Pause' : 'Play'}
    </button>
  );
}

export default AudioPlayer;

使用自定义 Hook

封装一个自定义 Hook 来复用音频播放逻辑。

react如何播放音乐

import { useState, useRef } from 'react';

function useAudioPlayer(src) {
  const audioRef = useRef(new Audio(src));
  const [isPlaying, setIsPlaying] = useState(false);

  const togglePlay = () => {
    if (isPlaying) {
      audioRef.current.pause();
    } else {
      audioRef.current.play();
    }
    setIsPlaying(!isPlaying);
  };

  return { isPlaying, togglePlay };
}

function AudioPlayer() {
  const { isPlaying, togglePlay } = useAudioPlayer('your-music-file.mp3');

  return (
    <button onClick={togglePlay}>
      {isPlaying ? 'Pause' : 'Play'}
    </button>
  );
}

export default AudioPlayer;

标签: 音乐react
分享给朋友:

相关文章

react如何发音

react如何发音

React的发音 React的正确发音为 /riˈækt/,类似于“ree-akt”。以下是详细说明: 发音分解 第一个音节“Ree”发音类似英文单词“see”中的“ee”音。 第二个音节…

react如何刷新

react如何刷新

刷新React组件的方法 使用状态更新触发重新渲染 通过更新组件的状态可以触发重新渲染。React会在状态变化时自动重新渲染组件。 const [count, setCount] = useStat…

react如何清理

react如何清理

清理 React 项目的方法 清理未使用的依赖项 运行 npm prune 或 yarn install --production 可以移除 node_modules 中未在 package.json…

react如何折叠

react如何折叠

在 React 中实现折叠功能 使用 useState 管理折叠状态 通过 useState 定义一个状态变量来控制折叠面板的显示与隐藏。例如: const [isCollapsed, setIsC…

react如何检测窗口

react如何检测窗口

监听窗口大小变化 使用useEffect钩子和resize事件监听窗口尺寸变化。在组件挂载时添加事件监听器,卸载时移除监听器以避免内存泄漏。 import { useState, useEffect…

react如何渲染图片

react如何渲染图片

在React中渲染图片的方法 使用<img>标签直接引入本地图片 将图片文件放入项目目录(如src/assets),通过相对路径引入。需注意Webpack可能需要配置file-loader…