Javascript 为什么这项活动没有通过?

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(){

为什么警报(“onEnded”)不起作用?大家都喜欢按手册做

如何在PlayerContainer中启动它

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中的事件?”