# Démarrage rapide React Router

Ajoutez un formulaire de contact fonctionnel à votre application React Router. Vous écrivez le formulaire, et Formerie le vérifie, le conserve et vous l’envoie par courriel.

## Installer

npm:

```sh
npm install @formerie/react @formerie/client
```

pnpm:

```sh
pnpm add @formerie/react @formerie/client
```

Yarn:

```sh
yarn add @formerie/react @formerie/client
```

Bun:

```sh
bun add @formerie/react @formerie/client
```

Les paquets Formerie sont en alpha, donc leurs API peuvent encore changer d’une version à l’autre.

## Ajouter le formulaire

Utilisez ce fichier comme composant de route, par exemple `app/routes/contact-form.tsx`.

```tsx
import { useFormerieSubmit } from "@formerie/react";

export default function ContactForm() {
  const { submit, state } = useFormerieSubmit({ workspace: "acme", form: "contact" });

  return (
    <form
      onSubmit={(event) => {
        event.preventDefault();
        submit({ fields: Object.fromEntries(new FormData(event.currentTarget)) });
      }}
    >
      <input name="name" placeholder="Name" required />
      <input name="email" type="email" placeholder="Email" required />
      <textarea name="message" placeholder="Message" required />
      <button disabled={state.status === "submitting"}>Send</button>
      {state.result?.ok === true && <p>Thanks!</p>}
      {state.result?.ok === false && <p>{state.result.error.message}</p>}
    </form>
  );
}
```

Le `name` de chaque champ de saisie correspond au champ qu’il remplit dans Formerie.

## Configurer le formulaire dans l’application

1. Ouvrez [app.formerie.com](https://app.formerie.com) et créez un formulaire nommé **Contact**. Il vient avec les
   champs de nom, de courriel et de message que ce code envoie.
2. Dans l’onglet **Livraison**, ajoutez votre adresse courriel, puis choisissez **Enregistrer la livraison**. Confirmez le
   courriel que Formerie vous envoie.
3. Dans l’onglet **Publication**, choisissez **API seulement** et ajoutez l’adresse qu’affiche votre serveur de développement, comme
   `http://localhost:5173`, sous **Adresses de vos sites**. `localhost` et `127.0.0.1` comptent comme deux adresses différentes.
   Ajoutez l’adresse de votre site en ligne de la même façon au moment de le déployer.
4. Choisissez **Publier le formulaire**.
5. Dans le code ci-dessus, remplacez `acme` par l’identifiant d’espace de travail affiché dans l’onglet **Publication**.

## Vérifier que c’est arrivé

Lancez votre application, remplissez le formulaire et envoyez-le. « Thanks! » s’affiche dans la page, un texte que vous
pouvez changer. Dans l’application Formerie, votre réponse apparaît sous **Soumissions**, et son courriel sous **Livraisons**.

Vous voyez une erreur CORS ou `NETWORK_ERROR`? L’adresse de votre site n’est pas encore dans l’onglet **Publication**, ou vous n’avez pas republié
depuis que vous l’avez ajoutée. Consultez [Dépannage](/fr/guides/troubleshooting/).

## Aller plus loin

### À partir de votre serveur

Utilisez une action de route, et un formulaire natif pourra y envoyer ses réponses. Lisez
[ce que l’approche par le serveur implique](/fr/guides/framework-entry-points/#à-partir-de-votre-serveur) avant de la choisir.

```ts
import { FormerieRuntimeClient } from "@formerie/client";
import type { Route } from "./+types/contact";

const formerie = new FormerieRuntimeClient();

export async function action({ request }: Route.ActionArgs) {
  const fields = Object.fromEntries(await request.formData());

  return formerie.submit("acme", "contact", { fields });
}
```

## À lire ensuite

- [Recettes](/fr/guides/recipes/) : demandes de soumission, sondages et acheminement par sujet
- [Afficher les erreurs de champ et plus encore](/fr/guides/framework-entry-points/#aller-plus-loin)
- [SDK JavaScript](/fr/guides/javascript-sdk/) et [API](/fr/guides/api-reference/) : la référence complète
