【发布时间】:2023-03-22 00:24:01
【问题描述】:
我有一个简单的音乐网络应用程序,可以在单击时更改音乐和图像封面,问题是当我单击一首歌曲时,封面图像正确更改但音频源不播放(src 属性设置正确但它是无法播放)
import React, {useState, useEffect} from "react";
const App = () => {
const [songs, setSongs] = useState([]);
const [playing, setPlaying] = useState({});
const server_url = `http://localhost:8765`;
useEffect(() => {
fetch(server_url)
.then(res => res.json())
.then(jsonRes => {
setPlaying(jsonRes.songs[0]);
setSongs(jsonRes.songs);
});
}, []);
return (
<div>
<div>
<img src={`${server_url}/music/imgs/${playing.img}`} width="200" height="200" />
<audio controls>
<source src={`${server_url}/music/mp3/${playing.mp3}`} type="audio/mpeg" />
Your browser does not support the audio element.
</audio>
</div>
<div>
<ul>
{
songs.map(song => {
return (
<li key={song.id} onClick={() => setPlaying(song)}>{song.name}</li>
)
})
}
</ul>
</div>
</div>
);
}
export default App;
来自 localhost:8765 的响应是这样的:
{"songs":
[
{"id":1,"name":"Hello","singer":"Adele","img":"adele.png","type":"pop","mp3":"Adele.mp3"},
{"id":2,"name":"de una vez","singer":"Selena gomez","img":"selena.png","type":"pop","mp3":"Selena.mp3"},
{"id":3,"name":"Bayda","singer":"Navid","img":"navid.png","type":"pop","mp3":"Navid.mp3"},
{"id":4,"name":"Takin' Back My Love ","singer":"Enrique Iglesias","img":"enrique.png","type":"Pop","mp3":"Enrique.mp3"}
]
}
【问题讨论】:
-
这是错字吗?应该是:
${server_url}/music/mp3/${playing}.mp3 -
其实我不这么认为,因为它是歌曲对象的索引,并且值本身有.mp3 我更新了问题以显示来自服务器的响应
-
知道了,感谢您的澄清。
-
在设置播放时,请在“网络”选项卡中确认歌曲正在下载。确保使用 HTTP 状态代码 200 加载路径。在音频 JSX 元素上使用 autoplay HTML 属性(即
-
感谢您的建议,但它不起作用。我检查了网络分接头,图像和媒体之间存在不同的行为,在图像选项卡中,页面第一次加载它以搜索未定义的图像,然后通过从服务器搜索图像名称来纠正它。但是在媒体选项卡中,它只搜索未定义而不是当前媒体,但是,正确说明音频的 src 属性,如果我在新选项卡中打开 src 音乐播放
标签: html reactjs html5-audio use-state