2016-03-07 16 views
19

Ich weiß, dass es ein Anti-Muster ist, um den Status auf componentDidMount setzen und ein Zustand sollte auf componentWillMount gesetzt werden, aber angenommen, ich möchte die Länge der Anzahl der li Tags als ein Zustand festlegen. In diesem Fall kann ich den Status nicht auf componentWillMount setzen, da die Tags li während dieser Phase möglicherweise nicht gemountet wurden. Also, was sollte hier die beste Option sein? Ist es in Ordnung, wenn ich den Status auf componentDidMount einstelle?Setze Zustand auf componentDidMount()

+1

Sie machen Sie die 'li' Tags auf einigen Requisiten basieren (oder Daten)? Könnten Sie einfach 'data.length' verwenden? –

+0

einfach einfach ausgedrückt. sag ich habe 4 'li' Tags und ich möchte die Anzahl von ihnen bekommen, so dass mein' maxNumber' Zustand sollte 4. aber ich render die 'li' Tags basierend auf einigen Requisiten (oder Daten). –

+0

Verwenden Sie dann die Daten von Requisiten in 'getInitialState()', um das Maximum zu berechnen, und geben Sie es dort ein. Es scheint nicht notwendig zu sein, auf die Montage der Komponente zu warten. – wintvelt

Antwort

24

Es ist kein Anti-Pattern zum Aufruf setState in componentDidMount. In der Tat bietet ReactJS ein Beispiel dafür in their documentation:

in componentDidMount Daten abrufen. Wenn die Antwort eintrifft, speichern Sie die Daten im Status und lösen Sie ein Rendering aus, um Ihre Benutzeroberfläche zu aktualisieren.

Example From Doc

componentDidMount: function() { 
    this.serverRequest = $.get(this.props.source, function (result) { 
     var lastGist = result[0]; 
     this.setState({ 
     username: lastGist.owner.login, 
     lastGistUrl: lastGist.html_url 
     }); 
    }.bind(this)); 
    } 
+19

'setState' ist in einer Callback-Funktion hier getan - das ist ein bisschen ein [anderes Szenario] (http://jaketrent.com/post/set-state-in-callbacks-in-react/) – Jordan

+0

ich bin nicht Sicher, es ist ein Anti-Pattern. Die [aktuelle Dokumentation] (https://facebook.github.io/react/docs/react-component.html#componentdidmount) erwähnt, dass der Einstellungszustand in 'componentDidMount' das erneute Rendern auslöst, aber es wird nicht erwähnt, dass es schlecht ist trainieren. – worc

+0

@worc diese Antwort beschreibt, dass es kein Anti-Muster ist. – lux

Verwandte Themen