我正嘗試用React構建一個迷你雙音軌音頻播放器。音頻由一個html音頻元素集中控制,並在一個子組件內包含一個音軌列表。 (尚未被稱呼)的球員可以看到here。(React js)音頻src在setState上更新,但音頻播放不變
我可以告訴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')
);
你可以試試'onChange = {this.onTrackChange.bind(this)}'? –
不幸的是,不幸的是,不過謝謝。 – theseboys
在您的示例中,出現此錯誤:「未捕獲的錯誤:Bootstrap的JavaScript需要jQuery」。你注意到了嗎? –