Heim > Web-Frontend > js-Tutorial > Warum erscheint „setState' von React asynchron und wie kann ich sicherstellen, dass der aktualisierte Status sofort wiedergegeben wird?

Warum erscheint „setState' von React asynchron und wie kann ich sicherstellen, dass der aktualisierte Status sofort wiedergegeben wird?

DDD
Freigeben: 2024-12-30 11:50:14
Original
1034 Leute haben es durchsucht

Why Does React's `setState` Appear Asynchronous, and How Can I Ensure Updated State is Immediately Reflected?

Verzögerte Statusaktualisierungen in React: Asynchrones setState verstehen

Bei der Arbeit mit React-Komponenten ist es wichtig, die Natur der setState-Methode zu verstehen. Im Gegensatz zur imperativen Programmierung, bei der Zustandsaktualisierungen sofort erfolgen, ist setState von React asynchron. Dies bedeutet, dass die Aktualisierung des Zustands keine sofortige Widerspiegelung im internen Zustand der Komponente garantiert.

Der fragliche Fall: Delayed BoardAdd Modal Show Flag

Bedenken Sie den folgenden Code Snippet, das eine BoardAdd-Komponente in React implementiert:

class BoardAdd extends React.Component {
    constructor(props) {
        super(props);
        this.state = {
            boardAddModalShow: false
        };
        this.openAddBoardModal = this.openAddBoardModal.bind(this);
    }

    openAddBoardModal() {
        this.setState({ boardAddModalShow: true });
        console.log(this.state.boardAddModalShow);
    }
}
Nach dem Login kopieren

Wenn die openAddBoardModal-Methode aufgerufen wird, wird sie Setzt das Flag „boardAddModalShow“ auf „true“ und gibt seinen Wert auf der Konsole aus. Die Konsolenausgabe zeigt jedoch, dass der Wert trotz des setState-Aufrufs falsch bleibt.

Warum?

setState ist asynchron. Nach dem Aufruf bleibt die Benutzeroberfläche unberührt, bis React ein erneutes Rendern plant. Die console.log-Anweisung wird ausgeführt, bevor das erneute Rendern erfolgt, was dazu führt, dass der veraltete Statuswert gedruckt wird.

Lösung: Verwenden eines Rückrufs

Um dieses Problem zu beheben, Wir können eine Callback-Funktion als Argument für setState verwenden. Der Rückruf wird ausgeführt, nachdem der Status aktualisiert wurde und das erneute Rendern erfolgt ist:

openAddBoardModal() {
    this.setState({ boardAddModalShow: true }, function () {
        console.log(this.state.boardAddModalShow);
    });
}
Nach dem Login kopieren

In diesem Fall wird die console.log-Anweisung ausgeführt, nachdem der Status aktualisiert wurde, und zeigt den neuen korrekt an Wert von boardAddModalShow als wahr.

Warum setState asynchron machen?

Diese asynchrone Natur von setState dient einem leistungssteigernden Zweck. Da Zustandsaktualisierungen ein erneutes Rendern auslösen, kann die Synchronisierung dazu führen, dass der Browser nicht mehr reagiert. Das Stapeln von setState-Aufrufen verbessert die Leistung, indem es unnötige erneute Renderings minimiert und die Benutzererfahrung verbessert.

Das obige ist der detaillierte Inhalt vonWarum erscheint „setState' von React asynchron und wie kann ich sicherstellen, dass der aktualisierte Status sofort wiedergegeben wird?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage