2017-10-12 1 views

Antwort

1

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.

0

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 
+0

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

+0

@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

Verwandte Themen