React-Komponenten zum Rerendern zwingen

Irakli Tchigladze 4 Dezember 2021
  1. Erzwingen Sie das Rendern von React-Komponenten mit den Klassenkomponenten
  2. Erzwingen Sie das Rendern von Reaktionskomponenten mit den Funktionskomponenten
React-Komponenten zum Rerendern zwingen

Standardmäßig werden die React-Komponenten durch die Änderungen ihres state oder ihrer props zum erneuten Rendern veranlasst. Wenn Sie die Best Practices von React befolgen, ist dieses Verhalten meistens mehr als ausreichend, um die gewünschten Ergebnisse zu erzielen.

In einigen Fällen reicht das Standardverhalten des Frameworks nicht aus und Sie müssen die Komponente manuell neu rendern. Sehen Sie sich vorher den Code sorgfältig an. Das Erzwingen einer erneuten Wiedergabe ist nur in einer begrenzten Anzahl von Umständen eine praktikable Option.

Erzwingen Sie das Rendern von React-Komponenten mit den Klassenkomponenten

Bei korrekter Verwendung sollte ein Aufruf der Methode setState() von React Class Component immer ein erneutes Rendern auslösen. Der Lebenszyklus von shouldComponentUpdate() kann eine bedingte Logik enthalten, die dieses Verhalten verhindert.

Wenn Sie setState() aufrufen, aber die Komponente nicht aktualisiert wird, stimmt möglicherweise etwas mit Ihrem Code nicht. Stellen Sie sicher, dass Sie einen triftigen Grund haben, die Methode forceUpdate() zu verwenden.

this.forceUpdate()

Wenn Ihre Methode render() auf Daten ausserhalb von state oder props basiert und Sie das erneute Rendern basierend auf Änderungen dieser Daten auslösen möchten, können Sie die Methode forceUpdate() verwenden.

Beispielcode:

class App extends Component {
  render() {
    return (    
    <div>
        <h1>{Math.random()}</h1>
        <button onClick={() => this.forceUpdate()}>Force Update</button>
    </div>)
  }
}

In diesem Fall löst eine Änderung von state oder props kein Update aus. Es ist die Methode forceUpdate(), die es tut.

Empfohlene Vorgehensweise

React-Entwickler sollten forceUpdate() nur als letztes Mittel verwenden. Die Renderfunktion sollte nur aus props und state lesen. Wenn Sie diese Richtlinien befolgen, können Sie die Einfachheit und Effizienz Ihrer React-Komponenten sicherstellen.

Es wird nicht empfohlen, die Methode forceUpdate() häufig zu verwenden. Wenn Sie es häufig verwenden, sollten Sie sich Ihren Code ansehen und sehen, ob er verbessert werden könnte.

Erzwingen Sie das Rendern von Reaktionskomponenten mit den Funktionskomponenten

Funktionskomponenten beinhalten nicht die Methode forceUpdate(). Es ist jedoch immer noch möglich, sie mit den Hooks useState() oder useReducer zum erneuten Rendern zu zwingen.

useState

Ähnlich der Methode setState() von Klassenkomponenten löst der Hook useState() immer ein Update aus, solange das aktualisierte state-Objekt einen anderen Wert hat.

Sie können einen benutzerdefinierten Hook erstellen, der den Hook useState() verwendet, um ein Update zu erzwingen. Hier ist ein Beispielcode für einen solchen wiederverwendbaren Hook:

const useForceUpdate = () => {
  const [ignored, newState] = useState();
  return useCallback(() => newState({}), []);
}

Wie wir alle wissen, gibt der Hook useState() zwei Werte zurück: den aktuellen Wert des state und seinen Setter. In diesem Fall benötigen wir nur den Setter newState.

useReducer

Da der Hook useState intern useReducer verwendet, können Sie diesen Hook direkt verwenden, um eine elegantere Lösung zu erstellen. Die von React Official Documents empfohlene Lösung verwendet ebenfalls useReducer(). Hier ist eine Beispiellösung:

const [any, forceUpdate] = useReducer(num => num + 1, 0);
function handleChange(){
    forceUpdate();
}

Der Hook useReducer() gibt den aktuellen state und die dispatch-Funktion zurück. Im obigen Beispiel verwenden wir die Syntax [variableName, dispatchName], um diese Werte zu speichern.

In diesem Beispiel würde der Aufruf eines handleChange()-Handlers Ihre Komponente zwingen, jedes Mal zu aktualisieren.

Haken sind nicht dafür gedacht, auf diese Weise verwendet zu werden. Versuchen Sie, diese Lösungen zum Testen oder für Ausreißerfälle zu verwenden.

Irakli Tchigladze avatar Irakli Tchigladze avatar

Irakli is a writer who loves computers and helping people solve their technical problems. He lives in Georgia and enjoys spending time with animals.

LinkedIn