【发布时间】:2015-05-31 06:00:17
【问题描述】:
我是 ReactJS (0.13.1) 的新手,我在我的应用程序中创建了一个组件来显示 HTML5 视频。
它似乎完美无缺,但仅适用于第一个选择。当您从一个视频切换到另一个视频时(当this.props.video 更改时),页面中实际显示和播放的视频不会改变。
我可以在 Chrome 检查器中看到 <source src='blah.mp4' /> 元素更新,但页面中实际呈现的视频并没有改变,如果它已经改变,它会继续播放。同样的事情发生在 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;
})();
更新:
换一种说法:
我有一个带有设置组件道具的 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”。
就像一旦浏览器加载了<video> 的媒体,它就会忽略对<source> 元素的任何更改。
【问题讨论】:
-
type 是可选的,如果没有提供类型,浏览器会向提供文件的服务器查询。
标签: javascript html5-video reactjs