我正在尝试使用 React 构建一个迷你 2 轨音频播放器。音频由 html 音频元素集中控制,该元素在子组件内具有轨道列表。可以在此处查看(尚未设计样式)播放器。
我可以在 React 开发工具中看到,单击单个轨道选择按钮确实会更新音频元素的 src(感谢这里的成员的帮助),但是,播放的音频不会改变。我已经在下面发布了应用程序代码。
甚至可以通过以这种方式更新状态来更改播放音频吗?帮助将不胜感激。
var TRACKLIST = [
{
id: 1,
name: "song a",
source: "./audio/test.m4a"
},
{
id: 2,
name: "song b",
source: "https://s3-us-west-2.amazonaws.com/s.cdpn.io/557257/wwy.mp3"
}
]
function Track(props) {
return (
<div className="track">
<div className="meta">
<div className="name">
<h2>{props.name}</h2>
</div>
<audio>
<source src={props.source} />
</audio>
</div>
<button className="select" onClick={function() {props.onChange(props.source);}} >
</button>
</div>
)
}
var Application = React.createClass({
getInitialState: function() {
return {
isPlaying: "./audio/test.m4a"
};
},
onTrackChange: function(source) {
this.setState({ isPlaying: source })
},
render: function() {
return (
<div className="player">
<div className="tracklist">
{this.props.tracklist.map(function(track){
return <Track
key={track.id}
name={track.name}
source={track.source}
onChange={this.onTrackChange} />
}.bind(this))}
</div>
<div className="controls">
<audio controls>
<source src={this.state.isPlaying} />
</audio>
</div>
</div>
)
}
});
// Render the UI
ReactDOM.render(
<Application tracklist={TRACKLIST} />,
document.getElementById('Player')
);