Im Moment tut der Code, was ich will, aber es stürzt auch meine Anwendung ab. Ich denke, es ist wegen einer Endlosschleife, aber ich bin mir nicht sicher. Ich möchte, dass der Code die zwei Variablen überprüft, wenn einer gleich dem anderen ist, möchte ich den Zustand des Modals ändern.Warum verursacht dies eine Endlosschleife? Ich verstehe nicht
newTimestamp wird jede Sekunde basierend auf den Sekunden in ReactPlayer erneuert.
Wie kann ich in dieser Situation eine Endlosschleife verhindern?
Dies ist mein Code:
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>
);
}
}
Dies sind die Fehlermeldungen sehe ich: "Uncaught Auslöser Range: Maximale Call-Stack-Größe überschritten"
Und
"Warnung: performUpdateIfNecessary: Unerwartete Chargennummer (aktuell 3200, ausstehende 178 3 "
Ich habe festgestellt, dass this.props.stopVideo(); verursachte die Schleife, aber ich verstehe nicht warum. Wer kann es erklären?
Leider wird Ihr Code-Snippet nicht in allen Browsern korrekt ausgeführt. Könnten Sie uns bitte eine genaue Beschreibung (einschließlich wörtlicher Fehlermeldungen) des Absturzes in "es stürzt auch meine Anwendung" geben? –
Nun, das Problem ist, ich bekomme keine Fehlermeldung ... Meine Anwendung funktioniert einfach nicht mehr. Ich kann nichts mehr klicken und nach einer Weile sagt der Browser, dass Seite nicht reagiert. Deshalb denke ich, dass es durch eine Endlosschleife verursacht wird. – Deelux
'componentWillReceiveProps' ist wahrscheinlich die Schleife. Das kann passieren, weil das 'stopVideo' eine Funktion im Elternteil auslöst, die verschiedene Requisiten sendet. –