В настоящий момент код делает то, что я хочу, но он также сбой моего приложения. Я думаю, что это из-за бесконечного цикла, но я не уверен. Я хочу, чтобы код проверял две переменные, если один равен другому, я хочу изменить состояние модальности.Почему это вызывает бесконечный цикл? Я не понимаю
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>
);
}
}
Эти сообщения об ошибках, которые я вижу: "Uncaught RangeError: Максимальный размер стека вызовов превысил"
И
"Warning: performUpdateIfNecessary: Неожиданный номер партии (текущий 3200, ожидающий 178 3 "
Я обнаружил, что добавление this.props.stopVideo(); вызвал цикл, но я не понимаю, почему. Кто-нибудь может объяснить?
К сожалению, ваш фрагмент кода не выполняется правильно во всех браузерах. Не могли бы вы дать нам точное описание (включая дословные сообщения об ошибках) об аварии в «он также сбой моего приложения»? –
Ну, проблема в том, что я не получаю сообщение об ошибке ... Мое приложение просто перестает работать. Я больше не могу ничего щелкнуть, и через некоторое время браузеры говорят, что страница не отвечает. Вот почему я думаю, что это вызвано бесконечным циклом. – Deelux
'componentWillReceiveProps' - это, вероятно, цикл. Это может случиться, потому что 'stopVideo' запускает функцию в родительском, которая отправляет разные реквизиты. –