Heim >Web-Frontend >js-Tutorial >Erkunden von React-Funktionen, veralteten Versionen und wichtigen Änderungen

Erkunden von React-Funktionen, veralteten Versionen und wichtigen Änderungen

Barbara Streisand
Barbara StreisandOriginal
2024-12-10 20:22:15621Durchsuche

Exploring React  Features, Deprecations, and Breaking Changes

React 19 ist da und bringt eine Fülle neuer Funktionen, Verbesserungen und bahnbrechender Änderungen mit sich. Diese Version definiert neu, wie Entwickler mit Zustandsverwaltung, Formularen und serverseitigem Rendering umgehen, während Legacy-APIs veraltet sind. Wenn Sie ein Upgrade planen, schnallen Sie sich an für eine transformative Reise. Dieser Leitfaden führt Sie durch die Highlights von React 19 und gibt Tipps für einen reibungslosen Übergang.


Höhepunkte von React 19

Neue Funktionen

1. Aktionen und useActionState

Die startTransition API unterstützt jetzt asynchrone Funktionen, die als „Aktionen“ bezeichnet werden. Aktionen können Statusaktualisierungen verwalten, Nebenwirkungen wie fetch() verarbeiten und eine Fehlerbehandlung umfassen. Sie optimieren Übergänge mit koordinierten Statusaktualisierungen und UI-Rendering.

Der neue useActionState-Hook ergänzt dies, indem er Zugriff auf Aktionszustände bietet, einschließlich ausstehender und endgültiger Zustände. Es akzeptiert einen Reduzierer für die granulare Steuerung und ist damit ein unverzichtbares Werkzeug für Formularinteraktionen und komplexe Zustandsflüsse.

2. Optimistische Updates mit useOptimistic

useOptimistic ermöglicht es Entwicklern, vorübergehende Zustandsänderungen festzulegen, während ein Übergang läuft, und sorgt so für ein reibungsloseres Benutzererlebnis. Der Status wird automatisch zurückgesetzt oder aktualisiert, sobald der asynchrone Vorgang abgeschlossen ist.

3. API verwenden

React 19 führt die use API ein, die das Lesen von Versprechen oder Kontexten während des Renderns ermöglicht. Dies kann die Arbeitsabläufe beim Abrufen von Serverdaten vereinfachen, bringt jedoch die Einschränkung mit sich, dass die Verwendung nur innerhalb einer Renderfunktion aufgerufen werden kann.

4. als Requisite verweisen

Sie können Refs jetzt direkt als Requisiten übergeben, wodurch die Notwendigkeit von „forwardRef“ entfällt. Diese Änderung vereinfacht die Komponentenzusammensetzung und macht die Arbeit mit Referenzen intuitiver.

5. Verbesserte Spannung

Suspense unterstützt jetzt Geschwister-Vorwärmung, wodurch Fallback-Komponenten sofort festgeschrieben werden, wenn ein Geschwister anhält. Diese Verbesserung steigert die Leistung und das Benutzererlebnis in datenintensiven Anwendungen.


Verbesserungen des DOM-Clients reagieren

1. Formularaktionen

Formulare in React sind intelligenter mit

Aktions-Requisiten, die eine bessere Integration mit useFormStatus ermöglichen. Durch das Absenden eines Formulars wird dessen Status für nicht kontrollierte Komponenten automatisch zurückgesetzt.

2. Dokumentenmetadaten und Ressourcenoptimierung

React 19 unterstützt nativ das Rendern von Dokumentmetadaten, wie z. B. oder <meta> Tags im Komponentenbaum. Darüber hinaus verbessern neue APIs wie Preinit, Preload und Preconnect die Ressourcenerkennung und Ladezeiten.</p> <h4> 3. <strong>Asynchrone Skripte</strong> </h4> <p>Sie können asynchrone Skripte jetzt überall im Komponentenbaum rendern. React übernimmt die Bestellung und Deduplizierung und optimiert die Skriptintegration von Drittanbietern.</p> <hr> <h3> <strong>React DOM Server</strong> </h3> <h4> 1. <strong>Neue Prerender-APIs</strong> </h4> <p>Die APIs <strong>prerender</strong> und <strong>prerenderToNodeStream</strong> verbessern das serverseitige Rendering (SSR) durch die Unterstützung von Streaming-Umgebungen wie Node.js. Diese APIs warten auf das Laden der Daten, bevor sie HTML generieren, wodurch SSR robuster wird.</p> <h4> 2. <strong>Stabile React-Server-Komponenten (RSC)</strong> </h4> <p>Serverkomponenten sind jetzt stabil, sodass Bibliotheken React 19 als Peer-Abhängigkeit ansprechen können. Dies entspricht der Full-Stack-React-Architektur und ermöglicht eine nahtlose Integration mit Frameworks wie Next.js.</p> <hr> <h3> <strong>Veraltungen und bahnbrechende Änderungen</strong> </h3> <h4> <strong>Veraltete Versionen</strong> </h4> <ul> <li> <strong>element.ref-Zugriff</strong>: Veraltet zugunsten von element.props.ref.</li> <li> <strong>react-test-renderer</strong>: Protokolliert veraltete Warnungen; Erwägen Sie eine Migration zur React Testing Library.</li> <li> <strong>Legacy-APIs</strong>: APIs wie contextTypes, defaultProps für Funktionen und String-Refs sind offiziell veraltet.</li> </ul> <h4> <strong>Breaking Changes</strong> </h4> <ol> <li><p><strong>JSX-Transformationsanforderung</strong><br> Die neue JSX-Transformation ist in React 19 obligatorisch. Dies ermöglicht Funktionen wie Refs als Requisiten und verbessert die Gesamtleistung.</p></li> <li><p><strong>Änderungen bei der Fehlerbehandlung</strong><br> Nicht erfasste Fehler werden jetzt an window.reportError gemeldet, während durch Grenzen erfasste Fehler über console.error protokolliert werden. Neue Methoden wie onUncaughtError und onCaughtError ermöglichen eine individuelle Anpassung.</p></li> <li> <p><strong>Entfernte APIs</strong></p> <ul> <li> <strong>ReactDOM.render und ReactDOM.hydrate</strong>: Ersetzt durch ReactDOM.createRoot und ReactDOM.hydrateRoot.</li> <li> <strong>defaultProps für Funktionen</strong>: Verwenden Sie stattdessen ES6-Standardparameter.</li> <li> <strong>Legacy-Kontext</strong>: Verwenden Sie die moderne contextType-API.</li> <li> <strong>react-dom/test-utils</strong>: Ersetzt durch act aus React core.</li> </ul> </li> <li><p><strong>UMD-Builds entfernt</strong><br> UMD-Builds werden nicht mehr unterstützt. Verwenden Sie ESM-basierte CDNs für die Verwendung von Skript-Tags, z. B. esm.sh.</p></li> </ol> <hr> <h2> <strong>Vorbereitung für das Upgrade</strong> </h2> <h3> 1. <strong>Upgrade zuerst auf React 18.3</strong> </h3> <p>React 18.3 führt veraltete Warnungen für APIs ein, die in React 19 entfernt wurden. Dieser Zwischenschritt hilft, potenzielle Probleme vor dem vollständigen Upgrade zu identifizieren.</p> <h3> 2. <strong>Codemods und Migrationstools</strong> </h3> <p>Verwenden Sie React-Codemods, um sich wiederholende Aktualisierungen zu automatisieren, z. B. das Refactoring veralteter APIs und das Anpassen von TypeScript-Typen.</p> <h3> 3. <strong>TypeScript-Anpassungen</strong> </h3> <p>React 19 enthält strengere TypeScript-Typisierungen. Zum Beispiel:</p> <ul> <li> ReactChild → React.ReactElement | Zahl | Zeichenfolge </li> <li> VoidFunctionComponent → FunctionComponent </li> </ul> <p>Refaktorieren Sie Ihren Code, um ihn an diese Updates anzupassen.</p> <hr> <h2> <strong>Tipps für einen reibungslosen Übergang</strong> </h2> <ul> <li> <strong>Nutzung des strengen Modus</strong>: React 19 führt eine strengere Durchsetzung von Best Practices ein. Wenn Sie Ihre App im strengen Modus ausführen, können versteckte Fehler aufgedeckt werden.</li> <li> <strong>Früh und häufig testen</strong>: Angesichts der bahnbrechenden Änderungen sind gründliche Tests von entscheidender Bedeutung. Der Übergang vom React-Test-Renderer zur React Testing Library stellt die Kompatibilität mit gleichzeitigem Rendering sicher.</li> <li> <strong>Server-Rendering überprüfen</strong>: Wenn Ihre App SSR verwendet, testen Sie sie mit den neuen Prerender-APIs von React 19 und stellen Sie eine reibungslose Integration von Serverkomponenten sicher.</li> </ul> <hr> <h2> <strong>Warum React 19 wichtig ist</strong> </h2> <p>React 19 ist ein bedeutender Fortschritt, der das Entwicklererlebnis verfeinert und gleichzeitig leistungsstarke Funktionen für moderne Anwendungen ermöglicht. Egal, ob Sie sich für asynchrone Aktionen, verbessertes Suspense oder serverseitige Rendering-Verbesserungen interessieren, diese Version ist vollgepackt mit Funktionen, die Entwicklern helfen, schnellere und belastbarere Apps zu erstellen.</p> <p>Bereit zum Eintauchen? Beginnen Sie mit dem Upgrade-Leitfaden für React 19 und lesen Sie die vollständigen Versionshinweise.</p> <p>Viel Spaß beim Codieren! ?</p> <p>Das obige ist der detaillierte Inhalt vonErkunden von React-Funktionen, veralteten Versionen und wichtigen Änderungen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!</p></div><div class="nphpQianMsg"><a href="javascript:void(0);">typescript</a> <a href="javascript:void(0);">html</a> <a href="javascript:void(0);">es6</a> <a href="javascript:void(0);">String</a> <a href="javascript:void(0);">Resource</a> <a href="javascript:void(0);">if</a> <a href="javascript:void(0);">for</a> <a href="javascript:void(0);">while</a> <a href="javascript:void(0);">include</a> <a href="javascript:void(0);">Error</a> <a href="javascript:void(0);">JS</a> <a href="javascript:void(0);">console</a> <a href="javascript:void(0);">number</a> <a href="javascript:void(0);">function</a> <a href="javascript:void(0);">default</a> <a href="javascript:void(0);">dom</a> <a href="javascript:void(0);">this</a> <a href="javascript:void(0);">transform</a> <a href="javascript:void(0);">transition</a> <a href="javascript:void(0);">ui</a> <a href="javascript:void(0);">Access</a><div class="clear"></div></div><div class="nphpQianSheng"><span>Stellungnahme:</span><div>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</div></div></div><div class="nphpSytBox"><span>Vorheriger Artikel:<a class="dBlack" title="Warum ist das Entfernen von JavaScript-Elementen so kompliziert und wie kann es vereinfacht werden?" href="https://m.php.cn/de/faq/1796715905.html">Warum ist das Entfernen von JavaScript-Elementen so kompliziert und wie kann es vereinfacht werden?</a></span><span>Nächster Artikel:<a class="dBlack" title="Warum ist das Entfernen von JavaScript-Elementen so kompliziert und wie kann es vereinfacht werden?" href="https://m.php.cn/de/faq/1796715919.html">Warum ist das Entfernen von JavaScript-Elementen so kompliziert und wie kann es vereinfacht werden?</a></span></div><div class="nphpSytBox2"><div class="nphpZbktTitle"><h2>In Verbindung stehende Artikel</h2><em><a href="https://m.php.cn/de/article.html" class="bBlack"><i>Mehr sehen</i><b></b></a></em><div class="clear"></div></div><ins class="adsbygoogle" style="display:block" data-ad-format="fluid" data-ad-layout-key="-6t+ed+2i-1n-4w" data-ad-client="ca-pub-5902227090019525" data-ad-slot="8966999616"></ins><script> (adsbygoogle = window.adsbygoogle || []).push({}); </script><ul class="nphpXgwzList"><li><b></b><a href="https://m.php.cn/de/faq/1609.html" title="Eine eingehende Analyse der Bootstrap-Listengruppenkomponente" class="aBlack">Eine eingehende Analyse der Bootstrap-Listengruppenkomponente</a><div class="clear"></div></li><li><b></b><a href="https://m.php.cn/de/faq/1640.html" title="Detaillierte Erläuterung des JavaScript-Funktions-Curryings" class="aBlack">Detaillierte Erläuterung des JavaScript-Funktions-Curryings</a><div class="clear"></div></li><li><b></b><a href="https://m.php.cn/de/faq/1949.html" title="Vollständiges Beispiel für die Generierung von JS-Passwörtern und die Erkennung der Stärke (mit Download des Demo-Quellcodes)" class="aBlack">Vollständiges Beispiel für die Generierung von JS-Passwörtern und die Erkennung der Stärke (mit Download des Demo-Quellcodes)</a><div class="clear"></div></li><li><b></b><a href="https://m.php.cn/de/faq/2248.html" title="Angularjs integriert WeChat UI (weui)" class="aBlack">Angularjs integriert WeChat UI (weui)</a><div class="clear"></div></li><li><b></b><a href="https://m.php.cn/de/faq/2351.html" title="Wie man mit JavaScript schnell zwischen traditionellem Chinesisch und vereinfachtem Chinesisch wechselt und wie Websites den Wechsel zwischen vereinfachtem und traditionellem Chinesisch unterstützen – Javascript-Kenntnisse" class="aBlack">Wie man mit JavaScript schnell zwischen traditionellem Chinesisch und vereinfachtem Chinesisch wechselt und wie Websites den Wechsel zwischen vereinfachtem und traditionellem Chinesisch unterstützen – Javascript-Kenntnisse</a><div class="clear"></div></li></ul></div></div><ins class="adsbygoogle" style="display:block" data-ad-format="autorelaxed" data-ad-client="ca-pub-5902227090019525" data-ad-slot="5027754603"></ins><script> (adsbygoogle = window.adsbygoogle || []).push({}); </script><footer><div class="footer"><div class="footertop"><img src="/static/imghwm/logo.png" alt=""><p>Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!</p></div><div class="footermid"><a href="https://m.php.cn/de/about/us.html">Über uns</a><a href="https://m.php.cn/de/about/disclaimer.html">Haftungsausschluss</a><a href="https://m.php.cn/de/update/article_0_1.html">Sitemap</a></div><div class="footerbottom"><p> © php.cn All rights reserved </p></div></div></footer><script>isLogin = 0;</script><script type="text/javascript" src="/static/layui/layui.js"></script><script type="text/javascript" src="/static/js/global.js?4.9.47"></script></div><script src="https://vdse.bdstatic.com//search-video.v1.min.js"></script><link rel='stylesheet' id='_main-css' href='/static/css/viewer.min.css' type='text/css' media='all'/><script type='text/javascript' src='/static/js/viewer.min.js?1'></script><script type='text/javascript' src='/static/js/jquery-viewer.min.js'></script><script>jQuery.fn.wait = function (func, times, interval) { var _times = times || -1, //100次 _interval = interval || 20, //20毫秒每次 _self = this, _selector = this.selector, //选择器 _iIntervalID; //定时器id if( this.length ){ //如果已经获取到了,就直接执行函数 func && func.call(this); } else { _iIntervalID = setInterval(function() { if(!_times) { //是0就退出 clearInterval(_iIntervalID); } _times <= 0 || _times--; //如果是正数就 -- _self = $(_selector); //再次选择 if( _self.length ) { //判断是否取到 func && func.call(_self); clearInterval(_iIntervalID); } }, _interval); } return this; } $("table.syntaxhighlighter").wait(function() { $('table.syntaxhighlighter').append("<p class='cnblogs_code_footer'><span class='cnblogs_code_footer_icon'></span></p>"); }); $(document).on("click", ".cnblogs_code_footer",function(){ $(this).parents('table.syntaxhighlighter').css('display','inline-table');$(this).hide(); }); $('.nphpQianCont').viewer({navbar:true,title:false,toolbar:false,movable:false,viewed:function(){$('img').click(function(){$('.viewer-close').trigger('click');});}}); </script></body></html>