我发现如果您有多个文件(例如图像或 mp3 文件等)想要动态包含到您的应用程序中,那么最好将它们存储在公共文件夹中(请参阅文档https://create-react-app.dev/docs/using-the-public-folder/ https://create-react-app.dev/docs/using-the-public-folder/).
注意:将文件存储在公共文件夹中时,不需要“导入”它们,但必须使用公共环境变量(process.env.PUBLIC_URL
)以便正确的路径(到你的public
文件夹)将被引用。
所以我的解决方案是:
- 我在以下位置创建了一个文件夹
public
名为的文件夹sounds
(我在其中存储了该项目的所有 mp3)。
- 然后我将音频组件(在原始帖子中)更改为以下内容:
.
import React, { Component } from 'react';
import './music-player.css';
const AudioPlayer = function(props) {
let mp3Src = process.env.PUBLIC_URL + props.sounds[props.currentSoundIndex].mp3;
return (<audio id="audio_player">
<source id="src_mp3" type="audio/mp3" src={mp3Src}/>
<source id="src_ogg" type="audio/ogg" src=""/>
<object id="audio_object" type="audio/x-mpeg" width="200px" height="45px" data={mp3Src}>
<param id="param_src" name="src" value={mp3Src} />
<param id="param_src" name="src" value={mp3Src} />
<param name="autoplay" value="false" />
<param name="autostart" value="false" />
</object>
</audio>
);
}
export default AudioPlayer;
Note: props.sounds
上面的代码中引用了我在 src 文件夹中的以下 JavaScript 数组:
let sounds = [{"title" : "Egyptian Beat", "artist" : "Sarah Monks", "length": 16, "mp3" : "sounds/0010_beat_egyptian.mp3"},
{"title" : "Euphoric Beat", "artist" : "Sarah Monks", "length": 31, "mp3" : "sounds/0011_beat_euphoric.mp3"},
{"title" : "Latin Beat", "artist" : "Sarah Monks", "length": 59, "mp3" : "sounds/0014_beat_latin.mp3"},
{"title" : "Pop Beat", "artist" : "Sarah Monks", "length": 24, "mp3" : "sounds/0015_beat_pop.mp3"},
{"title" : "Falling Cute", "artist" : "Sarah Monks", "length": 3, "mp3" : "sounds/0027_falling_cute.mp3"},
{"title" : "Feather", "artist" : "Sarah Monks", "length": 6, "mp3" : "sounds/0028_feather.mp3"},
{"title" : "Lose Cute", "artist" : "Sarah Monks", "length": 3, "mp3" : "sounds/0036_lose_cute.mp3"},
{"title" : "Pium", "artist" : "Sarah Monks", "length": 3, "mp3" : "sounds/0039_pium.mp3"}];