現時点ではコードは私がやりたいことをしますが、私のアプリケーションもクラッシュします。私はそれが無限ループのためだと思うが、わからない。 2つの変数をチェックするようにコードを設定したい場合は、1つが他と等しい場合は、モーダルの状態を変更する必要があります。これはなぜエンドレスループを引き起こすのですか?私は理解していません
newTimestampは、ReactPlayerで渡された秒数に基づいて毎秒更新されます。
この状況でエンドレスループを防止するにはどうすればよいですか?
これは私のコードです:
import React, { Component } from 'react';
import { Modal, Button, Tooltip, Link, ControlLabel } from 'react-bootstrap';
export class CommentsModalAdmin extends Component {
constructor(props) {
super(props);
this.state = {
showModal: false,
};
this.close = this.close.bind(this);
this.open = this.open.bind(this);
}
componentWillReceiveProps(props){
const newTimestamp = this.props.newTimestamp;
const timestamp = this.props.comment.timestamp;
if (newTimestamp === timestamp){
this.setState({ showModal: true });
this.props.stopVideo();
}
}
close() {
this.setState({ showModal: false });
this.props.playVideo();
}
open() {
this.setState({ showModal: true });
this.props.stopVideo();
}
render() {
const { newTimestamp, city, person, location, title, content, fileLink, timestamp } = this.props.comment;
return (
<div className="flex">
<a onClick={this.open}><span className="modal-bg"><span style={{ height: rand }} className="modal-color" ></span></span></a>
<Modal show={this.state.showModal} onHide={this.close} bsSize="lg">
<Modal.Header closeButton>
<Modal.Title >{title}</Modal.Title>
</Modal.Header>
<Modal.Body>
<p><ControlLabel>Tagged city: </ControlLabel> {city}</p>
<p><ControlLabel>Tagged person: </ControlLabel> {person}</p>
<p><ControlLabel>Tagged location: </ControlLabel> {location}</p>
<p><ControlLabel>Tagged image: </ControlLabel></p>
<img src={fileLink} width="100%"/>
<ControlLabel>Tagged content: </ControlLabel> <div dangerouslySetInnerHTML={{__html: content}} />
</Modal.Body>
<Modal.Footer>
<Button onClick={this.close}>Close</Button>
</Modal.Footer>
</Modal>
</div>
);
}
}
これらは私が表示されるエラーメッセージです: :
そして
"をキャッチされない例外RangeError最大コールスタックサイズを超えて" "警告:performUpdateIfNecessary:予期しないバッチ番号(現在の3200、保留中の178 3 "
this.props.stopVideo();を追加すると見つかりました。ループを引き起こしたが、私は理由を理解していない。誰でも説明できる?
残念ながら、コードスニペットはすべてのブラウザで正しく実行されません。 「私のアプリケーションもクラッシュする」というクラッシュの正確な説明(逐語的なエラーメッセージを含む)を教えてください。 –
問題は、エラーメッセージは表示されません...私のアプリケーションは動作を停止します。私はもう何もクリックできず、しばらくしてからページが応答していないとブラウザは言います。それが私がそれが無限ループによって引き起こされたと思う理由です。 – Deelux
'componentWillReceiveProps'はおそらくループです。これは、 'stopVideo'が、異なる小道具を送る親の関数をトリガーするために起こる可能性があります。 –