Javascript 为什么这会导致一个无休止的循环?我不知道';我不明白

Javascript 为什么这会导致一个无休止的循环?我不知道';我不明白,javascript,reactjs,meteor,Javascript,Reactjs,Meteor,目前,代码执行了我希望它执行的操作,但它也会使我的应用程序崩溃。我想这是因为一个无休止的循环,但我不确定。 我想让代码检查两个变量,如果一个等于另一个,我想改变模态的状态 newTimestamp根据传入的秒数每秒更新一次 在这种情况下,我如何防止无休止的循环 这是我的代码: import React,{Component}来自'React'; 从“react bootstrap”导入{Modal,Button,Tooltip,Link,ControlLabel}; 导出类CommentsMo

目前,代码执行了我希望它执行的操作,但它也会使我的应用程序崩溃。我想这是因为一个无休止的循环,但我不确定。 我想让代码检查两个变量,如果一个等于另一个,我想改变模态的状态

newTimestamp根据传入的秒数每秒更新一次

在这种情况下,我如何防止无休止的循环

这是我的代码:

import React,{Component}来自'React';
从“react bootstrap”导入{Modal,Button,Tooltip,Link,ControlLabel};
导出类CommentsModeLadmin扩展组件{
建造师(道具){
超级(道具);
此.state={
showModal:错,
};
this.close=this.close.bind(this);
this.open=this.open.bind(this);
}
组件将接收道具(道具){
const newTimestamp=this.props.newTimestamp;
const timestamp=this.props.comment.timestamp;
if(newTimestamp==时间戳){
this.setState({showmodel:true});
this.props.stopVideo();
}
}
关闭(){
this.setState({showmodel:false});
this.props.playVideo();
}
开(){
this.setState({showmodel:true});
this.props.stopVideo();
}
render(){
const{newTimestamp,city,person,location,title,content,fileLink,timestamp}=this.props.comment;
返回(
{title}
标记的城市:{city}

标记的人:{person}

标记的位置:{location}

标记图像:

标记内容: 接近 ); }
}
您正在使用
组件WillReceiveProps
方法。每当组件收到新的(或任何)道具时,就会执行此方法。在该方法中,您触发一个函数,该函数在组件的父级中被调用,作为回报,它触发另一个利用
setState
的函数

componentWillReceiveProps(props) {
  // ...
  this.props.stopVideo();
}

setState
会导致重新呈现,因此也会重新呈现
CommentsModalAdmin
,并调用
组件willreceiveprops
。这将导致循环


您可能需要修改该方法(或者检查道具是否实际更改为
props==this.props
)。

我通过添加一个额外的if/else条件来解决此问题,例如:

组件将接收道具(下一步){
const newTimestamp=this.props.newTimestamp;
const timestamp=this.props.comment.timestamp;
if(nextrops!==this.props){
if(this.state.showmodel===false){
if(newTimestamp==时间戳){
this.setState({showmodel:true});
this.props.stopVideo();
} 
}
}

}
不幸的是,您的代码片段并不能在所有浏览器中正确执行。你能在“它也会使我的应用程序崩溃”中给我们一个崩溃的确切描述(包括逐字的错误消息)吗?问题是,我没有收到错误消息。。。我的应用程序停止工作了。我再也不能点击任何东西了,过了一段时间浏览器显示页面没有响应。这就是为什么我认为它是由一个无休止的循环引起的。
组件willreceiveprops
可能就是循环。这可能是因为
stopVideo
在父级中触发了一个发送不同道具的函数。至少大多数浏览器都有一个控制台,您可以在其中看到来自JavaScript的错误消息-通常您可以按F12键访问它。但是先看看费边·舒尔茨的评论。好吧,停止录像只会改变家长的道具。像这样:stopVideo(){this.setState({playing:false}})啊,我不知道设置状态也会导致组件重新渲染。谢谢你的回答!我现在通过添加一个额外的if-else语句来解决这个问题。