Javascript 为什么这项活动没有通过?
为什么警报(“onEnded”)不起作用?大家都喜欢按手册做 如何在PlayerContainer中启动它Javascript 为什么这项活动没有通过?,javascript,reactjs,events,web,react-native,Javascript,Reactjs,Events,Web,React Native,为什么警报(“onEnded”)不起作用?大家都喜欢按手册做 如何在PlayerContainer中启动它 var PLAYER_ID='PLAYER'; var Player=React.createClass({ componentDidMount:function(){ document.getElementById(PLAYER_ID).addEventListener('ended',this.onEnded) }, componentWillUnmount:function(){
var PLAYER_ID='PLAYER';
var Player=React.createClass({
componentDidMount:function(){
document.getElementById(PLAYER_ID).addEventListener('ended',this.onEnded)
},
componentWillUnmount:function(){
document.getElementById(PLAYER_ID).removeEventListener('end',this.oneded)
},
渲染:函数(){
返回(
this
在this.oneded
中,指的是Player
实例不是PlayerContainer
实例,并且Player
没有oneded
方法,请尝试以下操作:
var PLAYER_ID='PLAYER';
var Player=React.createClass({
componentDidMount:function(){
document.getElementById(PLAYER_ID).addEventListener('end',this.props.oned)
},
componentWillUnmount:function(){
document.getElementById(PLAYER_ID).removeEventListener('end',this.props.oneded)
},
渲染:函数(){
返回(
this
在this.oneded
中,指的是Player
实例不是PlayerContainer
实例,并且Player
没有oneded
方法,请尝试以下操作:
var PLAYER_ID='PLAYER';
var Player=React.createClass({
componentDidMount:function(){
document.getElementById(PLAYER_ID).addEventListener('end',this.props.oned)
},
componentWillUnmount:function(){
document.getElementById(PLAYER_ID).removeEventListener('end',this.props.oneded)
},
渲染:函数(){
返回(
创建react应用程序时,您应该避免自己访问DOM。react为html元素上的事件提供回调。您需要通过道具将回调传递给视频
组件:
var Player = React.createClass({
render: function () {
return (
<video
id={PLAYER_ID}
src={this.props.src}
// pass the callback provided in the props to your video element
onEnded={this.props.onEnded}
/>
)
}
});
var PlayerContainer = React.createClass({
onEnded: function () {
alert("onEnded")
},
render: function() {
return (
<Player
src="http://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4"
// pass the callback to your Player component so that it will have it in it's props
onEnded={this.onEnded}
/>
);
}
});
React.render(
<PlayerContainer />,
document.body
);
var Player=React.createClass({
渲染:函数(){
返回(
)
}
});
var PlayerContainer=React.createClass({
ONENED:函数(){
警报(“已关闭”)
},
render:function(){
返回(
创建react应用程序时,您应该避免自己访问DOM。react为html元素上的事件提供回调。您需要通过道具将回调传递给视频
组件:
var Player = React.createClass({
render: function () {
return (
<video
id={PLAYER_ID}
src={this.props.src}
// pass the callback provided in the props to your video element
onEnded={this.props.onEnded}
/>
)
}
});
var PlayerContainer = React.createClass({
onEnded: function () {
alert("onEnded")
},
render: function() {
return (
<Player
src="http://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4"
// pass the callback to your Player component so that it will have it in it's props
onEnded={this.onEnded}
/>
);
}
});
React.render(
<PlayerContainer />,
document.body
);
var Player=React.createClass({
渲染:函数(){
返回(
)
}
});
var PlayerContainer=React.createClass({
ONENED:函数(){
警报(“已关闭”)
},
render:function(){
返回(
您必须将onEnded
作为道具从PlayerContainer
传递给PlayerContainer
,因此在PlayerContainer
中,您必须调用this.props.onEnded
,而不是this.onEnded
我复制了这个场景,看看这个:
您必须将onEnded
作为道具从PlayerContainer
传递给PlayerContainer
,因此在PlayerContainer
中,您必须调用this.props.onEnded
,而不是this.onEnded
我复制了这个场景,看看这个:
尽管这可能会起作用,但这不是使用react执行此操作的推荐方法。没有理由手动将事件侦听器附加到DOM元素,因为react已经在DOM元素上为此提供回调。每当您发现自己通过document.getElementByID()访问DOM时
在react组件内部,这在99.99%的情况下(包括本例)不是最好的做法。如果您需要对DOM元素的引用(例如,在表单中),则有参考而
提供了onEnded
回调。@trixn关于onEnded
你是对的,但这不是op的问题。我用React推荐的方法解决了他的问题,并保留了不相关的内容。好吧,那么让我换一种说法。这是非常非常糟糕的做法,你不应该在任何情况下处理这样的事件一个react驱动的应用程序。我不喜欢看到这种不好的做法作为公认的解决方案而不做任何评论,因为正确的方法更容易做到。显然,OP甚至没有做react教程,因为这里已经广泛地讨论了这一点。他正确的问题应该是“我如何处理react中的事件?”虽然这可能会起作用,但不建议使用react执行此操作。没有理由手动将事件侦听器附加到DOM元素,因为react已经在DOM元素上为此提供回调。每当您发现自己通过document.getElementByID()访问DOM时
在react组件内部,这在99.99%的情况下(包括本例)不是最好的做法。如果您需要对DOM元素的引用(例如,在表单中),则有参考而
提供了onEnded
回调。@trixn关于onEnded
你是对的,但这不是op的问题。我用React推荐的方法解决了他的问题,并保留了不相关的内容。好吧,那么让我换一种说法。这是非常非常糟糕的做法,你不应该在任何情况下处理这样的事件一个react驱动的应用程序。我不喜欢看到这种不好的做法作为公认的解决方案而不做任何评论,因为正确的方法更容易做到。显然,OP甚至没有做react教程,因为这里已经广泛地讨论了这一点。他正确的问题应该是“我如何处理react中的事件?”