使用 React 循环播放音频

我正在使用 React.js 并且我有一个返回音频的 API:


{

   audios: [

      "https://thisisanaudiolink",

      "https://thisisanaudiolink",

      "https://thisisanaudiolink"

   ]

}

我不想使用 HTML 的音频标签来播放,而是我的自定义按钮。我怎样才能做到这一点?


到目前为止我已经尝试过:


我试过这个循环,但所有按钮只播放最后一个音频:


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


const Flashcards = () => {


const [audios, setAudios] = useState([

    "https://s3-sa-east-1.amazonaws.com/carneiro/public/card_audios/d7f2a0-5c89ef/4.wav",

    "https://s3-sa-east-1.amazonaws.com/carneiro/public/card_audios/d7f2a0-5c89ef/12.wav",

    "https://s3-sa-east-1.amazonaws.com/carneiro/public/card_audios/d7f2a0-5c89ef/1.wav"

]);


const audioRef = useRef();


return (

    <div>

         {

             audios.map(audio => (

                <div key = {audio}>

                    <audio

                        controls = "controls"

                        preload = "auto"

                        autobuffer = "true"

                        style = {{display: "none"}}

                        ref = {audioRef}

                    >

                        <source src = {audio} />

                    </audio>



                    <button onClick = {() => audioRef.current.play()}>Play</button>

                </div>                  

             ))

         }

    </div>

   )

}

export default Flashcards;

   


斯蒂芬大帝
浏览 198回答 1
1回答

绝地无双

所有按钮将播放最后一个音频的原因是因为您尝试将所有音频与一个参考绑定,每个音频参考相互覆盖直到最后一个音频。有几种方法可以实现你想要的。最简单的方法是创建单独的组件来处理您的音频播放按钮。例如:function AudioPlayer({ src }) {&nbsp; const audioRef = useRef();&nbsp; return (&nbsp; &nbsp; <div>&nbsp; &nbsp; &nbsp; <audio&nbsp; &nbsp; &nbsp; &nbsp; controls = "controls"&nbsp; &nbsp; &nbsp; &nbsp; preload = "auto"&nbsp; &nbsp; &nbsp; &nbsp; autobuffer = "true"&nbsp; &nbsp; &nbsp; &nbsp; style = {{display: "none"}}&nbsp; &nbsp; &nbsp; &nbsp; ref = {audioRef}&nbsp; &nbsp; &nbsp; >&nbsp; &nbsp; &nbsp; &nbsp;<source src={src} />&nbsp; &nbsp; &nbsp; </audio>&nbsp; &nbsp; &nbsp; <button onClick = {() => audioRef.current.play()}>Play</button>&nbsp; &nbsp; </div>&nbsp; );}然后你可以在你的audio.mapaudios.map(audio => <AudioPlayer src={audio} />);
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript