Heim >Web-Frontend >js-Tutorial >React v The Stable Release und was es Neues gibt

React v The Stable Release und was es Neues gibt

Linda Hamilton
Linda HamiltonOriginal
2024-12-09 00:12:12780Durchsuche

React v The Stable Release and What’s New

React 19 ist offiziell gelandet und bringt eine Fülle neuer Funktionen und Verbesserungen mit sich, die die Entwicklung vereinfachen und die Anwendungsleistung verbessern. Von einer verbesserten Zustandsverwaltung bis hin zu einer besseren serverseitigen Integration bietet React 19 für jeden etwas.


Hauptfunktionen in React 19:

1. Aktionen für eine vereinfachte asynchrone Statusverwaltung

Die Verwaltung asynchroner Vorgänge wie API-Anfragen war schon immer eine häufige Herausforderung in React. React 19 führt Aktionen ein, die ausstehende Status, Fehlerbehandlung und optimistische Aktualisierungen automatisieren.

Beispiel: Vereinfachte Formularübermittlung mit

Aktionen

import { useActionState } from "react";

function UpdateNameForm() {
  const [error, submitAction, isPending] = useActionState(
    async (prevState, formData) => {
      const name = formData.get("name");
      const error = await updateName(name);
      if (error) {
        return error;
      }
      redirect("/profile");
      return null;
    },
    null
  );

  return (
    <form action={submitAction}>
      <input type="text" name="name" />
      <button type="submit" disabled={isPending}>
        Update
      </button>
      {error && <p>{error}</p>}
    </form>
  );
}

Hier verwaltet useActionState den Übermittlungsstatus und die Fehlerbehandlung für Sie, wodurch der Code sauberer und einfacher zu warten ist.


2. Optimistische Updates mit useOptimistic

Optimistische UI-Updates ermöglichen Benutzern, Änderungen sofort zu sehen, während eine asynchrone Anfrage ausgeführt wird. Der neue useOptimistic-Hook macht dieses Muster unkompliziert.

Beispiel: Optimistische Namensänderung

import { useOptimistic } from "react";

function ChangeName({ currentName, onUpdateName }) {
  const [optimisticName, setOptimisticName] = useOptimistic(currentName);

  const submitAction = async (formData) => {
    const newName = formData.get("name");
    setOptimisticName(newName); // Show optimistic state
    const updatedName = await updateName(newName); // Wait for the async request
    onUpdateName(updatedName); // Update the actual state
  };

  return (
    <form action={submitAction}>
      <p>Your name: {optimisticName}</p>
      <input type="text" name="name" />
      <button type="submit">Change Name</button>
    </form>
  );
}

useOptimistic sorgt für ein nahtloses Benutzererlebnis, indem Updates angezeigt werden, noch bevor der Server antwortet.


3. Verbesserte Fehlerberichterstattung bei Trinkfehlstellungen

React 19 verbessert die Fehlerbehandlung, insbesondere bei Flüssigkeitszufuhrfehlern. Anstelle vager Fehler erhalten Sie jetzt detaillierte Unterschiede zu nicht übereinstimmenden Inhalten zwischen Server und Client.

Beispiel: Hydration Error Diff

Uncaught Error: Hydration failed because the server-rendered HTML didn’t match the client.
Tree mismatch:
+ Client: <span>Welcome</span>
- Server: <span>Hello</span>

Diese klaren Nachrichten helfen Entwicklern, Probleme schnell und effizient zu beheben.


4. Serverkomponenten und Serveraktionen

React Server Components (RSCs) ermöglichen das Rendern von Komponenten auf dem Server und verbessern so die Leistung. Serveraktionen ermöglichen den Aufruf asynchroner Funktionen auf dem Server direkt von Clientkomponenten aus.

Beispiel: Verwendung von Serveraktionen

// Server Component
export const fetchComments = async () => {
  const response = await fetch("/api/comments");
  return await response.json();
};

// Client Component
import { use } from "react";

function Comments({ commentsPromise }) {
  const comments = use(commentsPromise); // Suspends until resolved
  return (
    <ul>
      {comments.map((comment) => (
        <li key={comment.id}>{comment.text}</li>
      ))}
    </ul>
  );
}

// Usage
function App() {
  return (
    <Suspense fallback={<p>Loading comments...</p>}>
      <Comments commentsPromise={fetchComments()} />
    </Suspense>
  );
}

Serveraktionen optimieren das Abrufen und Rendern serverseitiger Daten innerhalb von Clientkomponenten.


5. Native Metadaten- und Stylesheet-Verwaltung

React 19 unterstützt jetzt , <link> und <meta> Tags nativ, was die Verwaltung von Dokumentmetadaten vereinfacht.</p> <p><strong>Beispiel: Dynamische Metadaten in Komponenten</strong><br> </p> <pre class="brush:php;toolbar:false">function BlogPost({ title, keywords }) { return ( <article> <h1>{title}</h1> <title>{title}</title> <meta name="keywords" content={keywords.join(", ")} /> <p>Content of the blog post...</p> </article> ); } </pre> <p>React stellt sicher, dass diese Tags im <head> gerendert werden. Abschnitt automatisch, was SEO und Benutzerfreundlichkeit verbessert.</p> <p><strong>Beispiel: Verwaltete Stylesheets</strong><br> </p> <pre class="brush:php;toolbar:false">import { useActionState } from "react"; function UpdateNameForm() { const [error, submitAction, isPending] = useActionState( async (prevState, formData) => { const name = formData.get("name"); const error = await updateName(name); if (error) { return error; } redirect("/profile"); return null; }, null ); return ( <form action={submitAction}> <input type="text" name="name" /> <button type="submit" disabled={isPending}> Update </button> {error && <p>{error}</p>} </form> ); } </pre> <p>React stellt sicher, dass Stylesheets in der richtigen Reihenfolge und nur einmal geladen werden, auch wenn mehrfach darauf verwiesen wird.</p> <hr> <h3> <strong>Warum ein Upgrade auf React 19?</strong> </h3> <p>Die neuen Funktionen von React 19 reduzieren den Boilerplate-Code erheblich, verbessern die Anwendungsleistung und verbessern das Entwicklungserlebnis. Funktionen wie <strong>Aktionen</strong>, <strong>Optimistische Updates</strong> und <strong>Serverkomponenten</strong> ermöglichen es Entwicklern, dynamische, reaktionsfähige und skalierbare Anwendungen mit weniger Aufwand zu erstellen.</p> <hr> <h3> <strong>So führen Sie ein Upgrade durch</strong> </h3> <p>Befolgen Sie den React 19-Upgrade-Leitfaden für einen reibungslosen Übergang. Stellen Sie sicher, dass Sie gründlich testen und alle im Leitfaden beschriebenen wichtigen Änderungen berücksichtigen.</p> <hr> <p>React 19 ist ein Game-Changer, der Einfachheit, Leistung und Leistung vereint. Beginnen Sie mit diesen neuen Funktionen zu experimentieren und heben Sie Ihre React-Projekte auf die nächste Stufe!</p> <p>Das obige ist der detaillierte Inhalt vonReact v The Stable Release und was es Neues gibt. 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);">less</a> <a href="javascript:void(0);">for</a> <a href="javascript:void(0);">while</a> <a href="javascript:void(0);">Error</a> <a href="javascript:void(0);">using</a> <a href="javascript:void(0);">this</a> <a href="javascript:void(0);">transition</a> <a href="javascript:void(0);">ui</a> <a href="javascript:void(0);">SEO</a> <a href="javascript:void(0);">Game</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="Wie kann ich HTML-Tabellenüberschriften mit CSS und JavaScript einfrieren?" href="https://m.php.cn/de/faq/1796713282.html">Wie kann ich HTML-Tabellenüberschriften mit CSS und JavaScript einfrieren?</a></span><span>Nächster Artikel:<a class="dBlack" title="Wie kann ich HTML-Tabellenüberschriften mit CSS und JavaScript einfrieren?" href="https://m.php.cn/de/faq/1796713306.html">Wie kann ich HTML-Tabellenüberschriften mit CSS und JavaScript einfrieren?</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>