我是 ReactJS (0.13.1) 的新手,我在我的应用程序中创建了一个组件来显示 HTML5 视频。
它似乎工作得很好,但仅适用于第一个选择。当您从一个视频切换到另一个视频时(this.props.video
更改时),页面中实际显示和播放的视频不会更改。
我可以<source src='blah.mp4' />
在 Chrome 检查器中看到元素更新,但页面中实际呈现的视频不会改变,如果已经改变,它会继续播放。同样的事情发生在 Safari 和 Firefox 中。所有其他元素也相应地更新。
有任何想法吗?
无论如何我的组件如下:
(function(){
var React = require('react');
var VideoView = React.createClass({
render: function(){
var video = this.props.video;
var title = video.title === ''? video.id : video.title;
var sourceNodes = video.media.map(function(media){
media = 'content/'+media;
return ( <source src={media} /> )
});
var downloadNodes = video.media.map(function(media){
var ext = media.split('.').slice(-1)[0].toUpperCase();
media = 'content/'+media;
return (<li><a className="greybutton" href={media}>{ext}</a></li>)
});
return (
<div className="video-container">
<video title={title} controls width="100%">
{sourceNodes}
</video>
<h3 className="video-title">{title}</h3>
<p>{video.description}</p>
<div className="linkbox">
<span>Downloads:</span>
<ul className="downloadlinks">
{downloadNodes}
</ul>
</div>
</div>
)
}
});
module.exports = VideoView;
})();
更新:
用另一种方式描述它:
我有一个带有设置组件props的 onClick 处理程序的链接列表。
当我第一次点击视频链接(“Video Foo”)时
<video title="Video Foo" controls>
<source src="video-foo.mp4"/>
<source src="video-foo.ogv"/>
</video>
并且出现“Video Foo”并且可以播放。
然后当我点击下一个(“视频栏”)时,DOM 更新,我得到
<video title="Video Bar" controls>
<source src="video-bar.mp4"/>
<source src="video-bar.ogv"/>
</video>
然而,它仍然是可见且可以播放的“Video Foo”。
就像一旦浏览器为 a 加载了媒体,<video>
它就会忽略对<source>
元素的任何更改。