diff --git a/.github/ISSUE_TEMPLATE/0-bug.yml b/.github/ISSUE_TEMPLATE/0-bug.yml
new file mode 100644
index 000000000..4bb06d0f0
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/0-bug.yml
@@ -0,0 +1,34 @@
+name: "đ Signaler un bug"
+description: "Signale un bug sur le site web."
+title: "[Bug]: "
+labels: ["bug: unconfirmed"]
+body:
+ - type: textarea
+ attributes:
+ label: Résumé
+ description: |
+ Un résumé clair et concis du bug.
+ placeholder: |
+ Exemple de rapport de bug :
+ Lorsque je clique sur le bouton « Envoyer » des retours, rien ne se passe.
+ validations:
+ required: true
+ - type: input
+ attributes:
+ label: Page
+ description: |
+ Sur quelle page avez-vous constaté le bug ?
+ placeholder: |
+ https://fr.react.dev/
+ validations:
+ required: true
+ - type: textarea
+ attributes:
+ label: DĂ©tails
+ description: |
+ Veuillez fournir tout détail complémentaire utile sur ce bug.
+ placeholder: |
+ Exemples de détails :
+ Le bouton « Envoyer » ne réagit pas. J'ai tenté de rafraßchir la page et d'utiliser un autre navigateur, mais le problÚme persiste.
+ validations:
+ required: false
diff --git a/.github/ISSUE_TEMPLATE/1-typo.yml b/.github/ISSUE_TEMPLATE/1-typo.yml
new file mode 100644
index 000000000..c376a78f5
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/1-typo.yml
@@ -0,0 +1,34 @@
+name: "đ€Š Typo ou erreur"
+description: "Signale une typo ou une erreur dans les docs."
+title: "[Typo]: "
+labels: ["type: typos"]
+body:
+ - type: textarea
+ attributes:
+ label: Résumé
+ description: |
+ Un résumé clair et concis du bug.
+ placeholder: |
+ Exemple :
+ L'exemple de code sur la page "useReducer" comporte une variable `nextId` inutilisée.
+ validations:
+ required: true
+ - type: input
+ attributes:
+ label: Page
+ description: |
+ Sur quelle page avez-vous constaté la typo ?
+ placeholder: |
+ https://fr.react.dev/
+ validations:
+ required: true
+ - type: textarea
+ attributes:
+ label: DĂ©tails
+ description: |
+ Veuillez fournir tout détail complémentaire utile pour comprendre la nature de l'erreur.
+ placeholder: |
+ Exemple d'erreur :
+ Dans la section « useReducer » de la page « RĂ©fĂ©rence de l'API », l'exemple de code pour la partie « Ăcrire la fonction de rĂ©duction » comporte une variable `nextId` qui devrait ĂȘtre retirĂ©e.
+ validations:
+ required: false
diff --git a/.github/ISSUE_TEMPLATE/2-suggestion.yml b/.github/ISSUE_TEMPLATE/2-suggestion.yml
new file mode 100644
index 000000000..80e141ad6
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/2-suggestion.yml
@@ -0,0 +1,34 @@
+name: "đĄ Suggestions"
+description: "SuggĂšre une nouvelle page, section ou mise Ă jour d'une page existante."
+title: "[Suggestion]: "
+labels: ["type: documentation"]
+body:
+ - type: textarea
+ attributes:
+ label: Résumé
+ description: |
+ Un résumé clair et concis de ce que nous devrions ajouter.
+ placeholder: |
+ Exemple :
+ Ajouter une page décrivant l'utilisation de React avec TypeScript.
+ validations:
+ required: true
+ - type: input
+ attributes:
+ label: Page
+ description: |
+ De quelle page s'agit-il ?
+ placeholder: |
+ https://fr.react.dev/
+ validations:
+ required: false
+ - type: textarea
+ attributes:
+ label: DĂ©tails
+ description: |
+ Veuillez nous expliquer ce que vous suggérez.
+ placeholder: |
+ Exemple :
+ Je pense qu'il serait utile d'avoir une page expliquant comment utiliser React avec TypeScript. Elle pourrait inclure un exemple simple de composant écrit en TypeScript, et faire les liens adéquats vers la documentation de TypeScript.
+ validations:
+ required: true
diff --git a/.github/ISSUE_TEMPLATE/3-framework.yml b/.github/ISSUE_TEMPLATE/3-framework.yml
new file mode 100644
index 000000000..b16a38fbc
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/3-framework.yml
@@ -0,0 +1,116 @@
+name: "đ SuggĂ©rer un nouveau framework"
+description: "Je suis l'auteur·e d'unframework et j'aimerais qu'il fasse partie des frameworks recommandés."
+title: "[Framework]: "
+labels: ["type: framework"]
+body:
+ - type: markdown
+ attributes:
+ value: |
+ ## Candidature pour l'inclusion d'un framework React recommandé
+
+ _Ce formulaire s'adresse aux auteur·es de framework qui souhaitent candidater pour qu'il fasse partie de la liste des [frameworks React](https://react.dev/learn/start-a-new-react-project) recommandĂ©s. Si vous n'ĂȘtes pas l'auteur·e du framework, contactez ses auteur·es pour leur suggĂ©rer de candidater._
+
+ Lorsque nous recommandons un framework, nous le faisons afin que les développeur·ses puissent démarrer avec un projet React qui s'occupe d'entrée de jeu de sujets récurrents tels que la découpe de code, le chargement de données, le routage et la génération du HTML, sans avoir à fournir un travail complémentaire. Nous estimons que ça permettra aux gens de démarrer plus vite avec React, et de faire monter leur application à l'échelle en production.
+
+ MĂȘme si nous comprenons bien que de nombreux frameworks aimeraient ĂȘtre inclus dans la liste, cette page n'est pas lĂ pour faire la publicitĂ© de tous les frameworks React potentiels, ou de tous les frameworks auxquels React peut ĂȘtre intĂ©grĂ©. Il existe de nombreux superbes frameworks capables d'intĂ©grer React mais que nous ne listons pas dans nos guides. Les frameworks que nous recommandons ont investi de façon significative dans l'Ă©cosystĂšme React, et collaborĂ© avec l'Ă©quipe React pour ĂȘtre compatible avec notre [vision d'une architecture React full-stack](https://fr.react.dev/learn/start-a-new-react-project#which-features-make-up-the-react-teams-full-stack-architecture-vision).
+
+ Pour ĂȘtre inclus dans la liste, un framework doit satisfaire les critĂšres suivants :
+
+ - **Open-source et gratuit**Â : il doit ĂȘtre en logiciel libre et son utilisation gratuite.
+ - **Bonne maintenance** : il doit ĂȘtre activement maintenu, avec correctifs et amĂ©liorations.
+ - **Communauté active** : il doit disposer d'une communauté suffisamment large et vivante pour aider ses utilisateurs.
+ - **Adoption facile**Â : il doit disposer d'Ă©tapes claires pour l'installation de la version React du framework.
+ - **Compatible avec l'Ă©cosystĂšme**Â : il doit prendre en charge l'ensemble des bibliothĂšques et outils de l'Ă©cosystĂšme React.
+ - **Auto-hébergement possible** : il doit permettre l'auto-hébergement d'applications sans que cela en limite les fonctionnalités.
+ - **ExpĂ©rience de dĂ©veloppement (DX)** : il doit permettre aux dĂ©veloppeur·ses d'ĂȘtre productif·ves grĂące Ă des fonctionnalitĂ©s telles que _Fast Refresh_.
+ - **Expérience utilisateur (UX)** : il doit fournir des solutions intégrées aux problématiques usuelles telles que le routage et le chargement de données.
+ - **Compatible avec notre vision de l'avenir de React**. React Ă©volue avec le temps, et les frameworks qui ne s'alignent pas avec la direction que prend React risquent au fil du temps d'isoler leurs utilisateurs de l'Ă©cosystĂšme React principal. Pour vous inclure sur cette page, nous devons ĂȘtre confiants dans la capacitĂ© du framework Ă placer ses utilisateurs durablement sur le chemin du succĂšs avec React.
+
+ Notez bien que nous avons déjà passé en revue la plupart des frameworks populaires disponibles pour le moment, il est donc peu probable que nous n'ayons pas encore examiné votre framework. Mais si vous pensez que nous avons loupé quelque chose, veuillez remplir le formulaire ci-dessous.
+ - type: input
+ attributes:
+ label: Nom
+ description: |
+ Quel est le nom de votre framework ?
+ validations:
+ required: true
+ - type: input
+ attributes:
+ label: Page d'accueil
+ description: |
+ Quelle est l'URL de votre page d'accueil ?
+ validations:
+ required: true
+ - type: input
+ attributes:
+ label: Instructions d'installation
+ description: |
+ Quelle est l'URL de votre guide de démarrage ?
+ validations:
+ required: true
+ - type: dropdown
+ attributes:
+ label: Votre framework est-il open source ?
+ description: |
+ Nous ne recommandons que les frameworks open source et gratuits.
+ options:
+ - 'Non'
+ - 'Oui'
+ validations:
+ required: true
+ - type: textarea
+ attributes:
+ label: Maintenance active
+ description: |
+ Veuillez décrire (en anglais) en quoi votre framework est activement maintenu. Fournissez des exemples récents de versions publiées, correctifs et améliorations.
+ validations:
+ required: true
+ - type: textarea
+ attributes:
+ label: Communauté active
+ description: |
+ Veuillez décrire (en anglais) votre communauté. Indiquez-en la taille et fournissez des liens sur les ressoures communautaires.
+ validations:
+ required: true
+ - type: textarea
+ attributes:
+ label: Adoption facile
+ description: |
+ Veuillez décrire (en anglais) comment une personne peut installer votre framework avec React. Fournissez les liens adéquats vers votre documentation.
+ validations:
+ required: true
+ - type: textarea
+ attributes:
+ label: Compatibilité avec l'écosystÚme
+ description: |
+ Veuillez décrire (en anglais) toute limite connue que votre framework aurait vis-à -vis de l'écosystÚme React. Indiquez toute bibliothÚque ou tout outil dont vous savez qu'il n'est pas compatible avec votre framework.
+ validations:
+ required: true
+ - type: textarea
+ attributes:
+ label: Auto-hébergement
+ description: |
+ Veuillez décrire (en anglais) en quoi votre framework permet l'auto-hébergement. Indiquez toute limitation connue de fonctionnalités dans le cadre de l'auto-hébergement. Indiquez aussi s'il faut un serveur pour déployer votre framework.
+ validations:
+ required: true
+ - type: textarea
+ attributes:
+ label: Expérience de développement (DX)
+ description: |
+ Veuillez décrire (en anglais) en quoi votre framework permet une super expérience de développeemnt. Indiquez toute limite connue aux fonctionnalités telles que les outils de développement React, ceux de Chrome ou encore le Fast Refresh.
+ validations:
+ required: true
+ - type: textarea
+ attributes:
+ label: Expérience utilisateur (UX)
+ description: |
+ Veuillez dĂ©crire (en anglais) en quoi votre framework aide les gens Ă crĂ©er une expĂ©rience utilisateur de grande qualitĂ©, en s'occupant directement des problĂ©matiques courantes. Indiquez par exemple en quoi vous gĂ©rez nativement la dĂ©coupe de code, le routage, la gĂ©nĂ©ration de HTML ou le chargement de donnĂ©es d'une façon qui Ă©vite par dĂ©faut les cascades de requĂȘtes client/serveur. DĂ©taillez la façon dont vous permettez des approches telles que SSG ou SSR.
+ validations:
+ required: true
+ - type: textarea
+ attributes:
+ label: Compatible avec notre vision de l'avenir de React
+ description: |
+ Veuillez décrire (en anglais) en quoi votre framework est aligné avec notre vision de l'avenir de React. Indiquez comment votre framework évoluera avec React, et quels sont vos plans pour prendre en charge les fonctionnalités à venir de React telles que les React Server Components.
+ validations:
+ required: true
diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml
new file mode 100644
index 000000000..b8d428c56
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/config.yml
@@ -0,0 +1,7 @@
+contact_links:
+ - name: đ Bugs dans React
+ url: https://github.com/facebook/react/issues/new/choose
+ about: Ce suivi de tickets ne sert pas aux bugs dans React. DĂ©posez vos tickets React plutĂŽt lĂ -bas.
+ - name: đ€ Questions et Aide
+ url: https://react.dev/community
+ about: Ce suivi de tickets ne sert pas au support technique. Consultez plutĂŽt l'aide communautaire de React et les forums de discussion.
diff --git a/src/components/MDX/InlineCode.tsx b/src/components/MDX/InlineCode.tsx
index d206e9888..0e8db0165 100644
--- a/src/components/MDX/InlineCode.tsx
+++ b/src/components/MDX/InlineCode.tsx
@@ -5,7 +5,8 @@
import cn from 'classnames';
interface InlineCodeProps {
- isLink: boolean;
+ isLink?: boolean;
+ meta?: string;
}
function InlineCode({
isLink,
diff --git a/src/components/MDX/MDXComponents.tsx b/src/components/MDX/MDXComponents.tsx
index 2d5778205..fe3b9ac8c 100644
--- a/src/components/MDX/MDXComponents.tsx
+++ b/src/components/MDX/MDXComponents.tsx
@@ -19,6 +19,7 @@ import Link from './Link';
import {PackageImport} from './PackageImport';
import Recap from './Recap';
import Sandpack from './Sandpack';
+import SandpackWithHTMLOutput from './SandpackWithHTMLOutput';
import Diagram from './Diagram';
import DiagramGroup from './DiagramGroup';
import SimpleCallout from './SimpleCallout';
@@ -434,6 +435,7 @@ export const MDXComponents = {
Recap,
Recipes,
Sandpack,
+ SandpackWithHTMLOutput,
TeamMember,
TerminalBlock,
YouWillLearn,
diff --git a/src/components/MDX/Sandpack/Preview.tsx b/src/components/MDX/Sandpack/Preview.tsx
index 9669e5f4f..94fb50e90 100644
--- a/src/components/MDX/Sandpack/Preview.tsx
+++ b/src/components/MDX/Sandpack/Preview.tsx
@@ -188,7 +188,7 @@ export function Preview({
? 'absolute opacity-0 pointer-events-none duration-75'
: 'opacity-100 duration-150'
)}
- title="Sandbox Preview"
+ title="Prévisualisation de la sandbox"
style={{
height: iframeComputedHeight || '15px',
zIndex: isExpanded ? 'initial' : -1,
diff --git a/src/components/MDX/Sandpack/createFileMap.ts b/src/components/MDX/Sandpack/createFileMap.ts
index 85c7f09bf..615d34c9a 100644
--- a/src/components/MDX/Sandpack/createFileMap.ts
+++ b/src/components/MDX/Sandpack/createFileMap.ts
@@ -11,7 +11,10 @@ export const SUPPORTED_FILES = [AppJSPath, StylesCSSPath];
export const createFileMap = (codeSnippets: any) => {
return codeSnippets.reduce(
(result: Record, codeSnippet: React.ReactElement) => {
- if ((codeSnippet.type as any).mdxName !== 'pre') {
+ if (
+ (codeSnippet.type as any).mdxName !== 'pre' &&
+ codeSnippet.type !== 'pre'
+ ) {
return result;
}
const {props} = codeSnippet.props.children;
diff --git a/src/components/MDX/SandpackWithHTMLOutput.tsx b/src/components/MDX/SandpackWithHTMLOutput.tsx
new file mode 100644
index 000000000..971610a9c
--- /dev/null
+++ b/src/components/MDX/SandpackWithHTMLOutput.tsx
@@ -0,0 +1,85 @@
+import {Children, memo} from 'react';
+import InlineCode from './InlineCode';
+import Sandpack from './Sandpack';
+
+const ShowRenderedHTML = `
+import { renderToStaticMarkup } from 'react-dom/server';
+import formatHTML from './formatHTML.js';
+
+export default function ShowRenderedHTML({children}) {
+ const markup = renderToStaticMarkup(
+
+
+
{children}
+
+ );
+ return (
+ <>
+ HTML produit :
+
+ {formatHTML(markup)}
+
+ >
+ );
+}`;
+
+const formatHTML = `
+import format from 'html-format';
+
+export default function formatHTML(markup) {
+ // Bidouilles pour formatter lisiblement le HTML -- je n'ai pas
+ // réussi à trouver un module tournant cÎté navigateur qui nettoie
+ // le HTML s'il n'a pas de retours-chariot.
+ return format(markup
+ .replace('', '\\n')
+ .replace('', '\\n')
+ .replaceAll(/<\\/script>/g, '<\\/script>\\n')
+ .replaceAll(/
+```
+
+
+
+
+
+---
+
+## Reference {/*reference*/}
+
+### `
+```
+
+[See more examples below.](#usage)
+
+#### Props {/*props*/}
+
+`
+
+ >
+ );
+}
+
+export default function App() {
+ return (
+
+
+
+ );
+}
+```
+
+
diff --git a/src/content/reference/react-dom/components/title.md b/src/content/reference/react-dom/components/title.md
new file mode 100644
index 000000000..9d6ed18cc
--- /dev/null
+++ b/src/content/reference/react-dom/components/title.md
@@ -0,0 +1,98 @@
+---
+title: ""
+canary: true
+---
+
+
+
+React's extensions to `` are currently only available in React's canary and experimental channels. In stable releases of React `` works only as a [built-in browser HTML component](https://react.dev/reference/react-dom/components#all-html-components). Learn more about [React's release channels here](/community/versioning-policy#all-release-channels).
+
+
+
+
+
+
+The [built-in browser `` component](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/title) lets you specify the title of the document.
+
+```js
+My Blog
+```
+
+
+
+
+
+---
+
+## Reference {/*reference*/}
+
+### `` {/*title*/}
+
+To specify the title of the document, render the [built-in browser `` component](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/title). You can render `` from any component and React will always place the corresponding DOM element in the document head.
+
+```js
+My Blog
+```
+
+[See more examples below.](#usage)
+
+#### Props {/*props*/}
+
+`` supports all [common element props.](/reference/react-dom/components/common#props)
+
+* `children`: `` accepts only text as a child. This text will become the title of the document. You can also pass your own components as long as they only render text.
+
+#### Special rendering behavior {/*special-rendering-behavior*/}
+
+React will always place the DOM element corresponding to the `` component within the documentâs ``, regardless of where in the React tree it is rendered. The `` is the only valid place for `` to exist within the DOM, yet itâs convenient and keeps things composable if a component representing a specific page can render its `` itself.
+
+There are two exception to this:
+* If `` is within an `