Maison >interface Web >js tutoriel >Quoi de neuf dans React 19

Quoi de neuf dans React 19

Linda Hamilton
Linda Hamiltonoriginal
2024-12-23 13:37:23728parcourir

What’s new in React 19

Actes

Un cas d'utilisation courant dans les applications React consiste à effectuer une mutation de données, puis à mettre à jour l'état en réponse. Par exemple, lorsqu'un utilisateur soumet un formulaire pour modifier son nom, vous effectuerez une requête API, puis gérerez la réponse. Dans le passé, vous deviez gérer manuellement les états en attente, les erreurs, les mises à jour optimistes et les demandes séquentielles.

Par exemple, vous pouvez gérer l'état d'attente et d'erreur dans useState :

// 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>
  );
}

Dans React 19, nous ajoutons la prise en charge de l'utilisation de fonctions asynchrones dans les transitions pour gérer automatiquement les états en attente, les erreurs, les formulaires et les mises à jour optimistes.

Par exemple, vous pouvez utiliser useTransition pour gérer l'état en attente pour vous :

// 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>
  );
}

La transition asynchrone définira immédiatement l'état isPending sur true, effectuera la ou les requêtes asynchrones et fera passer isPending à false après toute transition. Cela vous permet de garder l'interface utilisateur actuelle réactive et interactive pendant que les données changent.

Note

Par convention, les fonctions qui utilisent des transitions asynchrones sont appelées « Actions ».
Les actions gèrent automatiquement la soumission des données pour vous :

État en attente : les actions fournissent un état en attente qui démarre au début d'une requête et se réinitialise automatiquement lorsque la mise à jour de l'état final est validée.
Mises à jour optimistes : les actions prennent en charge le nouveau hook useOptimistic afin que vous puissiez afficher des commentaires instantanés aux utilisateurs pendant la soumission des demandes.
Gestion des erreurs : les actions assurent la gestion des erreurs afin que vous puissiez afficher les limites d'erreur lorsqu'une demande échoue et rétablir automatiquement les mises à jour optimistes à leur valeur d'origine.
Formulaires : Les éléments prennent désormais en charge la transmission de fonctions aux accessoires action et formAction. La transmission de fonctions aux accessoires d'action utilise les actions par défaut et réinitialise automatiquement le formulaire après la soumission.

S'appuyant sur les actions, React 19 introduit useOptimistic pour gérer les mises à jour optimistes, et un nouveau hook React.useActionState pour gérer les cas courants pour les actions. Dans React-dom, nous ajoutons

Actions pour gérer automatiquement les formulaires et utiliserFormStatus pour prendre en charge les cas courants d'actions dans les formulaires.

Dans React 19, l'exemple ci-dessus peut être simplifié en :

// 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>
  );
}

Dans la section suivante, nous détaillerons chacune des nouvelles fonctionnalités d'action de React 19.

Nouveau crochet : useActionState

Pour faciliter les cas courants pour les actions, nous avons ajouté un nouveau hook appelé useActionState :

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 accepte une fonction (l'"Action") et renvoie une action encapsulée à appeler. Cela fonctionne parce que les actions composent. Lorsque l'action encapsulée est appelée, useActionState renverra le dernier résultat de l'action sous forme de données et l'état en attente de l'action comme en attente.

Note

React.useActionState s'appelait auparavant ReactDOM.useFormState dans les versions Canary, mais nous l'avons renommé et obsolète useFormState.

Voir #28491 pour plus d'informations.
Pour plus d'informations, consultez la documentation pour useActionState.

Réagissez DOM : Actes

Les actions sont également intégrées au nouveau fonctionnalités pour réagir-dom. Nous avons ajouté la prise en charge du passage de fonctions en tant qu'accessoires action et formAction de , et

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn