Ich weiß, dass normalerweise jede Änderung in den Requisiten oder der Zustand einer React Component bewirkt, dass es neu gerendert wird, aber in welchen Szenarien kann ein setState()
Aufruf erfolgen und nicht zu einem erneuten Rendern führen?In welchen Fällen verursacht der setState() KEINE erneute Wiedergabe in einer React Component?
Antwort
Beim Vererben von plain React.Component
wird React standardmäßig render()
für die Komponente aufrufen, wenn entweder die Elternkomponente neu rendert oder setState in der Komponente aufgerufen wird.
Wenn Sie jedoch sollteComponentUpdate() in Ihrer React-Komponente implementieren, können Sie den Aktualisierungszyklus kurzschließen. Dies ist nützlich, wenn Sie nur eine begrenzte Anzahl von Requisiten haben, die Grundwerte sind (string, number, bool) oder wenn Sie mit unveränderlichen Datenstrukturen arbeiten. Dann können Sie einfach so etwas tun:
shouldComponentUpdate(nextProps, nextState) {
return nextState.name !== this.state.name // Don't re-render if name is equal
}
Die Standardimplementierung von shouldComponentUpdate() ist
shouldComponentUpdate(nextProps, nextState) {
return true;
}
Es ist auch möglich, von React.PureComponent zu erben, die im Grunde flachen Vergleich Ihrer Requisiten implementiert und Zustand.
Ich würde die folgenden Artikel für eine tiefer gehende Antwort empfehlen: https://reactjs.org/docs/optimizing-performance.html#avoid-reconciliation und https://cdb.reacttraining.com/react-inline-functions-and-performance-bdff784f5578 (Vor allem der Abschnitt genannt (PureComponent und shouldComponentUpdate)
Es ist auch nützlich, den Unterschied zwischen zu verstehen, was passiert, wenn die render-Funktion aufgerufen wird und was der Versöhnung Algorithmus tut, um das DOM zu aktualisieren. Mehr zu diesem here.
definitionsgemäß this.setState
verursacht eine rerender. Wenn Sie ohne rerender this.state
ändern wollen, ist nichts, was man fro stoppen Ich mache eine normale manuelle Zuweisung.
this.setState({name: 'newname'}) //changes this.state with render
this.state.name = 'newname' //no rerender, but still changes this.state
- 1. React: setState verursacht Absturz der App
- 2. .setState ist keine Funktion in React Native
- 3. React - _this2.SetState ist keine Funktion
- 4. React - SetState in KomponenteWillReceiveProps
- 5. In welchen Fällen kann mongoexport verwendet werden?
- 6. React Component Fehler (Input)
- 7. setState innerhalb einer Schleife - React
- 8. In welchen Fällen sind Ausdrucksbäume nützlich?
- 9. Warum verursacht das Aufrufen von setState in ComponentDidMount einen Fehler?
- 10. setInterval mit setState in React
- 11. Race-Bedingung in React setState
- 12. In welchen Fällen erstellt Oracle automatisch Indizes?
- 13. In welchen Fällen benötigen wir geschützte Vererbung?
- 14. Javascript-Einsatz in React setState
- 15. BrowserWindow in React Component importieren
- 16. Überschreiben einer React Component-Methode
- 17. React - setState nicht zurücksetzen Eingabe
- 18. React-native 0,35 setState-Problem
- 19. React setState funktioniert nicht
- 20. React-Native Button onPress setState
- 21. ngif verursacht das erneute Laden der Seite - Angular 2
- 22. Call react component von außen
- 23. React setState Updates Requisiten
- 24. Converting component state in JSON in React
- 25. React Native: setState Verzögerung
- 26. setState in react funktioniert nicht in react-Komponente
- 27. Probleme mit setState Handlern in React
- 28. In welchen Fällen gibt die Process.Start() -Methode false zurück?
- 29. this.props zeigt als undefined in einer Pfeilfunktion in React Component
- 30. Wie setze ich SetState in React synchron
Wird nicht this.state direkt als eine schlechte Praxis betrachtet? Laut React [docs] (https://reactjs.org/docs/react-component.html#state): "this.state" niemals direkt mutieren, da der Aufruf von 'setState()' später die Mutation ersetzen kann gemacht. Behandle "this.state" so, als wäre es unveränderlich. – Namit
@Namit Es ist, weil es in der React-Welt nie nötig ist, 'this.state' ohne einen renderer zu ändern. Wenn Sie Daten bearbeiten möchten, die sich ständig ändern, aber nicht jedes Mal neu gerendert werden sollen, sollten diese Daten wahrscheinlich nicht in "this.state" gesetzt werden. – Andrew