2017-09-20 2 views
0

Ich erhalte diesen Fehler, wenn ich versuche, einen übergeordneten Stil basierend auf einer Logik in der untergeordneten Komponente zu ändern.ReactJS Ändern des übergeordneten Stils verursacht RangeError: Maximale Größe des Aufrufstapels überschritten

RangeError: Maximale Call-Stack-Größe überschritten.

Ich habe versucht, den Aufruf der Eltern in ComponentWillUpdate und ComponentShouldUpdate sowie andere Lebenszyklus-Ereignisse zu ändern und es scheint einfach nicht zu funktionieren.

Hier ist ein Jsbin zu sehen, was vor sich geht. Am Ende der Folien sollte der Hintergrund weiß werden, was es tut, aber es wirft auch den Fehler und bewirkt, dass die App nicht mehr funktioniert.

https://jsbin.com/mahocuq/edit?html,js,console,output

componentWillUpdate() { 
    if(this.props.slideNum === 2){ 
     this.changeStyle("#fff") 
    } 
    console.log(this.props.slideNum); 
} 
+0

Mögliches Duplikat [Reagieren: Uncaught Auslöser Range: Maximale Call-Stack-Größe überschritten] (https://stackoverflow.com/questions/43314933/react-uncaught-rangeerror-maximum -call-stack-size-exceeded) – imjared

Antwort

4

Ihr Zustand sagt, dass auf Update, wenn Sie auf Folie zwei sind, ein Update auf die Eltern auslösen.

Wenn Sie das übergeordnete Element aktualisieren, werden die Requisiten an das untergeordnete Element weitergegeben und lösen ein Update aus. Sie erstellen eine Endlosschleife.

Sie würden wahrscheinlich die Hintergrundfarbe übergeben, damit Sie überprüfen können, ob Sie es erwarten und Sie keine weiteren Updates benötigen. Ziemlich nicht getestet, aber so etwas wie dies funktionieren soll:

<Slides 
    currentBackgroundColor={this.state.backgroundColor} 
    ChangeParentStyle={this.ChangeParentStyle.bind(this)} 
    slideNum={this.state.slideNum} 
/> 

... 
class Slides extends React.Component { 
    componentWillUpdate() { 
     if(this.props.slideNum === 2 && this.props.currentBackgroundColor !== `#fff`){ 
      this.props.ChangeParentStyle(`#fff`); 
     } 
    } 
+0

Das scheint zu funktionieren. Ich habe eine neue jsbin erstellt: https://jsbin.com/gorge/edit?html,js,console,output – bradrice

+0

@bradrice groß. Wenn es für dich funktioniert, kannst du die Antwort akzeptieren? – imjared

Verwandte Themen