Meine React-Komponente wird aufgrund des Strict Mode zweimal gerendert
Lesezeit: 4 Minuten
Johanna heiraten
Meine React-Komponente wird zweimal gerendert. Also habe ich beschlossen, eine zeilenweise Fehlersuche durchzuführen, und das Problem ist hier:
if ( workInProgress.mode & StrictMode) {
instance.render();
}
React-dom.development.js
Liegt es am strikten Modus? Kann ich es deaktivieren? Was ist der strikte Modus? Brauche ich es?
StrictMode sollte als letzte Lösung entfernt werden. Eine ausführlichere Antwort finden Sie unter stackoverflow.com/questions/72238175/….
– yousoumar
28. Oktober 2022 um 13:00 Uhr
StrictMode rendert Komponenten zweimal (in der Entwicklung, aber nicht in der Produktion), um Probleme mit Ihrem Code zu erkennen und Sie davor zu warnen (was sehr nützlich sein kann).
Wenn Sie StrictMode in Ihrer App aktiviert haben, sich aber nicht daran erinnern, es aktiviert zu haben, kann dies daran liegen, dass Sie create-react-app oder ähnliches verwendet haben, um Ihre App ursprünglich zu erstellen, wodurch StrictMode standardmäßig automatisch aktiviert wird.
Beispielsweise könnten Sie feststellen, dass Ihre {app} von umschlossen ist <React.StrictMode> in deiner index.js:
Der Dokumente Verweisen Sie auf das absichtliche „doppelte Aufrufen“ im Dev-Modus: „Der strenge Modus kann Nebeneffekte nicht automatisch für Sie erkennen, aber er kann Ihnen helfen, sie zu erkennen, indem er sie ein wenig deterministischer macht. Dies geschieht durch absichtliches doppeltes Aufrufen der folgenden Funktionen “
– Nick Mitchell
21. Oktober 2021 um 3:09 Uhr
Hatte einen Ereignis-Listener zweimal aufgerufen und fragte sich warum. Scheint der strenge Modus die Ursache gewesen zu sein. Danke!
– Jakub Kvba
21. Juli 2022 um 13:13 Uhr
@JakubKvba nein, das hat nichts mit Event-Handlern zu tun, nur mit Effekten
– Himmelsjunge
2. August 2022 um 8:20 Uhr
Für Next.js-Entwickler können Sie es deaktivieren, indem Sie „reactStrictMode: false“ in der Datei next.config.js festlegen.
– Mahmud
19. September 2022 um 21:13 Uhr
StrictMode sollte als letzte Lösung entfernt werden. Eine ausführlichere Antwort finden Sie unter stackoverflow.com/questions/72238175/….
– yousoumar
28. Oktober 2022 um 12:59 Uhr
Haris Schafik
Ja, Sie müssen den Strict Mode als entfernen
Strikter Modus kippen Nebenwirkungen automatisch für Sie erkennen, aber es kann Ihnen helfen, sie zu erkennen, indem es sie ein wenig deterministischer macht. Dies geschieht durch absichtliches doppeltes Aufrufen der folgenden Funktionen: Klassenkomponentenkonstruktor , render und shouldComponentUpdate Methoden.
Wenn ich hinzufügen darf, wenn Sie es eingeschaltet lassen, wird es Ihnen helfen, widerstandsfähigere Komponenten zu schreiben, indem es Ihnen hilft, Fehler früher zu erkennen. Es ist also nicht so, dass Sie es brauchen, aber es wird sehr empfohlen, dass Sie es verwenden. Beachten Sie, dass das doppelte Rendern nur in der Entwicklung stattfindet, nicht in der Produktion.
– Jackief
16. April 2020 um 15:48 Uhr
@Jackyef Wie entferne ich es? oder meine App in den Produktionsmodus versetzen? <React></React> gibt einen Fehler..
– Johanna heiraten
16. April 2020 um 15:57 Uhr
Entfernen Sie einfach die <React.StrictMode> das umschließt Ihre App und es wird gut.
– Jackief
16. April 2020 um 16:04 Uhr
du hast das abschließende Komma nach {app} ausgelassen wie diese {app},
– Kimilhee
21. Dezember 2021 um 3:30 Uhr
StrictMode sollte als letzte Lösung entfernt werden. Eine ausführlichere Antwort finden Sie unter stackoverflow.com/questions/72238175/….
– yousoumar
28. Oktober 2022 um 13:00 Uhr
Sgoran
Für Next.js-Benutzer hier wie mich selbst ist der strikte Modus ebenfalls standardmäßig aktiviert und verursacht dieses Problem.
Sie haben Recht, es ist standardmäßig wahr, und das Festlegen von „reactStrictMode“ auf „false“ würde das Problem lösen, aber wir sollten auch bedenken, wie nextjs docs empfiehlt, dass es auch von Vorteil sein kann, „reactStrictMode“ auf „true“ zu halten: nextjs.org/docs/api-reference/next.config.js/react-strict-mode
– Elyas Karimi
14. September 2022 um 12:31 Uhr
StrictMode gibt es aus gutem Grund. Deaktivieren ist das letzte, was zu tun ist. Eine ausführlichere Antwort finden Sie unter stackoverflow.com/a/72238236/15288641
– yousoumar
16. Dezember 2022 um 9:05 Uhr
Es scheint, dass die Komponente zweimal gerendert wird, aber die erste gerenderte Komponente ist nicht unmontiert? Zumindest ist das das Verhalten, das ich bei React 17 sehe, könnte natürlich ein Fehler in meinem Code sein
In einer React-App mit Strikter Modus:
Wenn Sie zwei Konsolenprotokolle wie diese sehen:
Und wenn Sie wissen, dass StrictMode Ihnen hilft, Ihre App auf irgendeine Weise zu optimieren
Und Sie möchten StrictMode nicht vollständig deaktivieren
In Ihrem Chrome Developer Tools-Fenster wird eine neue Registerkarte mit dem Namen Komponenten geschaffen. Klick es an.
Klicken Sie dann auf das Zahnradsymbol auf der Registerkarte Komponenten.
Wählen Sie dann die aus Debuggen Registerkarte und aktivieren Sie die Option zu Protokolle während des zweiten Renderns im strengen Modus ausblenden.
Sie werden die doppelten Protokolle in der Konsole nicht mehr sehen.
Wenn Sie nextjs verwenden und den strikten Modus deaktivieren möchten, gehen Sie zu your next.config.js Datei und setze „reactStrictMode“ auf „false“.
module.exports = {
reactStrictMode: false,
};
aber der strikte Modus wird für die Entwicklung empfohlen, sobald Sie überprüfen, ob die doppelte Einbindung durch den strengen Modus verursacht wird, ist es vorzuziehen, ihn zu aktivieren
14420900cookie-checkMeine React-Komponente wird aufgrund des Strict Mode zweimal gerendertyes
StrictMode
sollte als letzte Lösung entfernt werden. Eine ausführlichere Antwort finden Sie unter stackoverflow.com/questions/72238175/….– yousoumar
28. Oktober 2022 um 13:00 Uhr