当前位置:首页 > 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 来复用音频播放逻辑。

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 native如何启动

react native如何启动

如何启动 React Native 项目 安装 Node.js 和 npm 确保已安装 Node.js(建议版本 16 或更高)和 npm(Node.js 自带)。可通过以下命令检查版本: nod…

电脑如何安装react

电脑如何安装react

安装 Node.js 和 npm React 依赖于 Node.js 和 npm(Node Package Manager)。从 Node.js 官网下载并安装最新稳定版本,安装完成后会自动包含 np…

如何手写一个react

如何手写一个react

手写一个简单的 React 创建一个基础的 React 实现需要理解其核心概念:虚拟 DOM、组件、状态管理和渲染。以下是一个简化版的 React 实现。 创建虚拟 DOM 虚拟 DOM 是真实…

react性能如何

react性能如何

React 性能特点 React 通过虚拟 DOM(Virtual DOM)和高效的 diff 算法优化性能。虚拟 DOM 减少了直接操作真实 DOM 的开销,仅在必要时更新变化的部分。React 的…

如何启动react

如何启动react

安装Node.js 确保系统已安装Node.js(建议使用LTS版本),可通过官网下载并安装。安装完成后,在终端运行以下命令验证版本: node -v npm -v 创建React项目 使用官方工具…

如何提高react

如何提高react

优化性能 使用React.memo对组件进行记忆化处理,避免不必要的重新渲染。对于类组件,可以使用PureComponent来达到类似效果。 利用useMemo缓存计算结果,避免重复计算。对于函数或…