Heim >Web-Frontend >js-Tutorial >Was ist neu in React 19?

Was ist neu in React 19?

Linda Hamilton
Linda HamiltonOriginal
2024-12-23 13:37:23734Durchsuche

What’s new in React 19

Aktionen

Ein häufiger Anwendungsfall in React-Apps besteht darin, eine Datenmutation durchzuführen und dann als Reaktion den Status zu aktualisieren. Wenn ein Benutzer beispielsweise ein Formular zur Namensänderung sendet, stellen Sie eine API-Anfrage und verarbeiten dann die Antwort. In der Vergangenheit mussten Sie ausstehende Status, Fehler, optimistische Aktualisierungen und sequentielle Anfragen manuell bearbeiten.

Zum Beispiel könnten Sie den Status „Ausstehend“ und „Fehler“ in useState:
behandeln

// Before Actions
function UpdateName({}) {
  const [name, setName] = useState("");
  const [error, setError] = useState(null);
  const [isPending, setIsPending] = useState(false);

  const handleSubmit = async () => {
    setIsPending(true);
    const error = await updateName(name);
    setIsPending(false);
    if (error) {
      setError(error);
      return;
    } 
    redirect("/path");
  };

  return (
    <div>
      <input value={name} onChange={(event) => setName(event.target.value)} />
      <button onClick={handleSubmit} disabled={isPending}>
        Update
      </button>
      {error && <p>{error}</p>}
    </div>
  );
}

In React 19 fügen wir Unterstützung für die Verwendung asynchroner Funktionen in Übergängen hinzu, um ausstehende Status, Fehler, Formulare und optimistische Aktualisierungen automatisch zu verarbeiten.

Zum Beispiel können Sie useTransition verwenden, um den ausstehenden Status für Sie zu verwalten:

// Using pending state from Actions
function UpdateName({}) {
  const [name, setName] = useState("");
  const [error, setError] = useState(null);
  const [isPending, startTransition] = useTransition();

  const handleSubmit = () => {
    startTransition(async () => {
      const error = await updateName(name);
      if (error) {
        setError(error);
        return;
      } 
      redirect("/path");
    })
  };

  return (
    <div>
      <input value={name} onChange={(event) => setName(event.target.value)} />
      <button onClick={handleSubmit} disabled={isPending}>
        Update
      </button>
      {error && <p>{error}</p>}
    </div>
  );
}

Der asynchrone Übergang setzt den Status „isPending“ sofort auf „true“, stellt die asynchrone(n) Anforderung(en) und schaltet „isPending“ nach allen Übergängen auf „false“. Dadurch können Sie die aktuelle Benutzeroberfläche reaktionsfähig und interaktiv halten, während sich die Daten ändern.

Notiz

Konventionell werden Funktionen, die asynchrone Übergänge verwenden, „Aktionen“ genannt.
Aktionen verwalten automatisch die Übermittlung von Daten für Sie:

Ausstehender Status: Aktionen stellen einen ausstehenden Status bereit, der zu Beginn einer Anfrage beginnt und automatisch zurückgesetzt wird, wenn die endgültige Statusaktualisierung festgeschrieben wird.
Optimistische Updates: Aktionen unterstützen den neuen useOptimistic-Hook, sodass Sie Benutzern sofortiges Feedback anzeigen können, während die Anfragen gesendet werden.
Fehlerbehandlung: Aktionen bieten Fehlerbehandlung, sodass Sie Fehlergrenzen anzeigen können, wenn eine Anfrage fehlschlägt, und optimistische Aktualisierungen automatisch auf ihren ursprünglichen Wert zurücksetzen können.
Formulare: Elemente unterstützen jetzt die Übergabe von Funktionen an die Action- und formAction-Requisiten. Bei der Übergabe von Funktionen an die Aktions-Requisiten werden standardmäßig Aktionen verwendet und das Formular nach der Übermittlung automatisch zurückgesetzt.

Aufbauend auf Actions führt React 19 useOptimistic ein, um optimistische Updates zu verwalten, und einen neuen Hook React.useActionState, um häufige Fälle für Actions zu verarbeiten. In React-Dom fügen wir

Aktionen zur automatischen Verwaltung von Formularen und Verwendung von FormStatus zur Unterstützung der allgemeinen Fälle für Aktionen in Formularen.

In React 19 kann das obige Beispiel wie folgt vereinfacht werden:

// Using <form> Actions and useActionState
function ChangeName({ name, setName }) {
  const [error, submitAction, isPending] = useActionState(
    async (previousState, formData) => {
      const error = await updateName(formData.get("name"));
      if (error) {
        return error;
      }
      redirect("/path");
      return null;
    },
    null,
  );

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

Im nächsten Abschnitt werden wir jede der neuen Aktionsfunktionen in React 19 aufschlüsseln.

Neuer Hook: useActionState

Um die häufigsten Fälle für Aktionen zu vereinfachen, haben wir einen neuen Hook namens useActionState:
hinzugefügt

const [error, submitAction, isPending] = useActionState(
  async (previousState, newName) => {
    const error = await updateName(newName);
    if (error) {
      // You can return any result of the action.
      // Here, we return only the error.
      return error;
    }

    // handle success
    return null;
  },
  null,
);

useActionState akzeptiert eine Funktion (die „Aktion“) und gibt eine umschlossene Aktion zum Aufrufen zurück. Das funktioniert, weil Aktionen komponieren. Wenn die umschlossene Aktion aufgerufen wird, gibt useActionState das letzte Ergebnis der Aktion als Daten und den ausstehenden Status der Aktion als ausstehend zurück.

Notiz

React.useActionState hieß in den Canary-Versionen zuvor ReactDOM.useFormState, aber wir haben es umbenannt und useFormState als veraltet markiert.

Weitere Informationen finden Sie unter #28491.
Weitere Informationen finden Sie in den Dokumenten zu useActionState.

DOM reagieren: Aktionen

Aktionen sind auch in das neue von React 19 integriert. Funktionen für React-Dom. Wir haben Unterstützung für die Übergabe von Funktionen als Aktions- und formAction-Requisiten von , und

Stellungnahme:
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