`'s `color` to red without impacting `background-color`. Similarly, **different React contexts don't override each other.** Each context that you make with `createContext()` is completely separate from other ones, and ties together components using and providing *that particular* context. One component may use or provide many different contexts without a problem.
+En CSS, des propriétés distinctes comme `color` et `background-color` ne sont pas remplacées les unes par les autres. Vous pouvez définir la `color` de toutes les `
` en rouge sans impacter la `background-color`. De la même façon, **des contextes React distincts ne s'écrasent pas les uns les autres**. Chaque contexte que vous créez avec `createContext()` est complétement isolé des autres et lie les composants qui utilisent et fournissent ce contexte *particulier*. Un composant peut utiliser et fournir différents contextes sans problème.
-## Before you use context {/*before-you-use-context*/}
+## Avant d'utiliser un contexte {/*before-you-use-context*/}
-Context is very tempting to use! However, this also means it's too easy to overuse it. **Just because you need to pass some props several levels deep doesn't mean you should put that information into context.**
+Il est souvent très tentant de recourir à des contextes ! Toutefois, il est aussi très facile d'en abuser. **Ce n'est pas parce que vous devez propager des props sur plusieurs niveaux que vous devez mettre ces informations dans un contexte**.
-Here's a few alternatives you should consider before using context:
+Voici certaines alternatives à considérer avant d'utiliser un contexte :
-1. **Start by [passing props.](/learn/passing-props-to-a-component)** If your components are not trivial, it's not unusual to pass a dozen props down through a dozen components. It may feel like a slog, but it makes it very clear which components use which data! The person maintaining your code will be glad you've made the data flow explicit with props.
-2. **Extract components and [pass JSX as `children`](/learn/passing-props-to-a-component#passing-jsx-as-children) to them.** If you pass some data through many layers of intermediate components that don't use that data (and only pass it further down), this often means that you forgot to extract some components along the way. For example, maybe you pass data props like `posts` to visual components that don't use them directly, like `
`. Instead, make `Layout` take `children` as a prop, and render `
`. This reduces the number of layers between the component specifying the data and the one that needs it.
+1. **Commencez par [passer les props](/learn/passing-props-to-a-component).** Si vos composants ne sont pas triviaux, il est courant de passer une douzaine de props à travers une douzaine de composants. Ça peut sembler fastidieux, mais ça permet de savoir clairement quels composants utilisent quelles données ! La personne chargée de la maintenance de votre code sera ravie que vous ayez rendu le flux de données explicite grâce aux props.
+2. **Extrayez des composants et [passez-leur du JSX dans les `children`](/learn/passing-props-to-a-component#passing-jsx-as-children).** Si vous passez des données à travers plusieurs couches de composants qui ne les utilisent pas (et ne font que les transmettre plus bas), ça signifie souvent que vous avez oublié d'extraire certains composants en cours de route. Par exemple, vous pouvez passer certaines données en props comme `posts` à des composants visuels qui ne les utilisent pas directement, tel que `
`. Préférez faire en sorte que `Layout` prenne `children` en tant que prop, puis faites le rendu de `
`. Ça réduit le nombre de couches entre les composants qui spécifient la donnée et ceux qui l'utilisent.
-If neither of these approaches works well for you, consider context.
+Si aucune de ces approches ne vous convient, envisagez un contexte.
-## Use cases for context {/*use-cases-for-context*/}
+## Cas d'utilisation des contextes {/*use-cases-for-context*/}
-* **Theming:** If your app lets the user change its appearance (e.g. dark mode), you can put a context provider at the top of your app, and use that context in components that need to adjust their visual look.
-* **Current account:** Many components might need to know the currently logged in user. Putting it in context makes it convenient to read it anywhere in the tree. Some apps also let you operate multiple accounts at the same time (e.g. to leave a comment as a different user). In those cases, it can be convenient to wrap a part of the UI into a nested provider with a different current account value.
-* **Routing:** Most routing solutions use context internally to hold the current route. This is how every link "knows" whether it's active or not. If you build your own router, you might want to do it too.
-* **Managing state:** As your app grows, you might end up with a lot of state closer to the top of your app. Many distant components below may want to change it. It is common to [use a reducer together with context](/learn/scaling-up-with-reducer-and-context) to manage complex state and pass it down to distant components without too much hassle.
-
-Context is not limited to static values. If you pass a different value on the next render, React will update all the components reading it below! This is why context is often used in combination with state.
+* **Thème :** si votre appli permet à l'utilisateur d'en changer l'apparence (comme le mode sombre), vous pouvez mettre un fournisseur de contexte tout en haut de votre appli et utiliser ce contexte dans les composants qui ont besoin d'ajuster leur aspect.
+* **Compte utilisateur :** de nombreux composants peuvent avoir besoin de connaître l'utilisateur actuellement connecté. Le fait de le placer dans le contexte en facilite la lecture depuis n'importe quel endroit de l'arbre. Certaines applis vous permettent d'utiliser plusieurs comptes simultanément (par exemple pour laisser un commentaire avec un utilisateur différent). Dans ce cas, il peut être pratique d'enrober une partie de l'interface utilisateur dans un fournisseur avec un compte utilisateur différent.
+* **Routage :** la plupart des solutions de routage utilise un contexte en interne pour conserver la route actuelle. C'est ainsi que chaque lien « sait » s'il est actif ou non. Si vous construisez votre propre routeur, vous serez peut-être tenté·e de faire de même.
+* **Gestion d'état :** au fur et à mesure que votre appli grandit, vous pouvez vous retrouver avec de nombreux états proches de la racine de votre appli. De nombreux composants distants pourraient vouloir les changer. Il est courant [d'utiliser un réducteur avec un contexte](/learn/scaling-up-with-reducer-and-context) pour gérer des états complexes et les transmettre à des composants distants sans trop galérer.
-In general, if some information is needed by distant components in different parts of the tree, it's a good indication that context will help you.
+Le contexte ne se limite pas aux valeurs statiques. Si vous passez une valeur différente au prochain rendu, React mettra à jour tous les composants descendants qui le lisent ! C'est pourquoi le contexte est souvent utilisé en combinaison avec l'état.
+
+D'une manière générale, si certaines informations sont nécessaires pour des composants distants dans différentes parties de l'arborescence, alors c'est une bonne indication que le contexte vous sera utile.
-* Context lets a component provide some information to the entire tree below it.
-* To pass context:
- 1. Create and export it with `export const MyContext = createContext(defaultValue)`.
- 2. Pass it to the `useContext(MyContext)` Hook to read it in any child component, no matter how deep.
- 3. Wrap children into `` to provide it from a parent.
-* Context passes through any components in the middle.
-* Context lets you write components that "adapt to their surroundings".
-* Before you use context, try passing props or passing JSX as `children`.
+* Le contexte permet à un composant de fournir certaines informations à l'ensemble de l'arbre situé en dessous de lui.
+* Pour transmettre un contexte :
+ 1. Créez-le et exportez-le avec `export const MyContext = createContext(defaultValue)`.
+ 2. Passez-le au Hook `useContext(MyContext)` depuis n'importe quel composant enfant pour pouvoir le lire, aussi profondément imbriqué soit-il.
+ 3. Enrobez les enfants dans un `` pour le fournir depuis un parent.
+* Le contexte traverse tous les composants intermédiaires.
+* Le contexte vous permet d'écrire des composants qui « s'adaptent à leur environnement ».
+* Avant d'utiliser un contexte, essayez de passer par les props ou en mettant du JSX dans les `children`.
-#### Replace prop drilling with context {/*replace-prop-drilling-with-context*/}
+#### Remplacer la percolation de props par un contexte {/*replace-prop-drilling-with-context*/}
-In this example, toggling the checkbox changes the `imageSize` prop passed to each ``. The checkbox state is held in the top-level `App` component, but each `` needs to be aware of it.
+Dans cet exemple, le fait d'activer la case à cocher change la prop `imageSize` passée à chaque ``. L'état de cette case à cocher est conservé dans le composant racine `App`, mais chaque `` doit en être informé.
-Currently, `App` passes `imageSize` to `List`, which passes it to each `Place`, which passes it to the `PlaceImage`. Remove the `imageSize` prop, and instead pass it from the `App` component directly to `PlaceImage`.
+Pour l'instant, `App` transmet `imageSize` à `List`, qui la transmet ensuite à chaque `Place` qui transmettent enfin à `PlaceImage`. Supprimez la prop `imageSize` pour la fournir directement à `PlaceImage` depuis le composant `App`.
-You can declare context in `Context.js`.
+Vous pouvez déclarer le contexte dans `Context.js`.
@@ -905,7 +905,7 @@ export default function App() {
setIsLarge(e.target.checked);
}}
/>
- Use large images
+ Utiliser de grandes images
@@ -959,38 +959,38 @@ function PlaceImage({ place, imageSize }) {
```js data.js
export const places = [{
id: 0,
- name: 'Bo-Kaap in Cape Town, South Africa',
- description: 'The tradition of choosing bright colors for houses began in the late 20th century.',
+ name: 'Bo-Kaap à Cape Town, Afrique du Sud',
+ description: 'La tradition de choisir des couleurs vives pour les maisons remonte à la fin du XXe siècle.',
imageId: 'K9HVAGH'
}, {
- id: 1,
- name: 'Rainbow Village in Taichung, Taiwan',
- description: 'To save the houses from demolition, Huang Yung-Fu, a local resident, painted all 1,200 of them in 1924.',
+ id: 1,
+ name: 'Rainbow Village à Taichung, Taiwan',
+ description: "Pour sauver les maisons de la démolition, Huang Yung-Fu, un résident de la région, a peint l'ensemble des 1 200 maisons en 1924.",
imageId: '9EAYZrt'
}, {
- id: 2,
- name: 'Macromural de Pachuca, Mexico',
- description: 'One of the largest murals in the world covering homes in a hillside neighborhood.',
+ id: 2,
+ name: 'Macromural de Pachuca, Mexique',
+ description: "L'une des plus grandes fresques murales du monde recouvre les maisons d'un quartier à flanc de colline.",
imageId: 'DgXHVwu'
}, {
- id: 3,
- name: 'Selarón Staircase in Rio de Janeiro, Brazil',
- description: 'This landmark was created by Jorge Selarón, a Chilean-born artist, as a "tribute to the Brazilian people."',
+ id: 3,
+ name: 'Selarón Staircase à Rio de Janeiro, Brésil',
+ description: "Ce monument a été créé par Jorge Selarón, un artiste d'origine chilienne, en guise d’« hommage au people du Brésil ».",
imageId: 'aeO3rpI'
}, {
- id: 4,
- name: 'Burano, Italy',
- description: 'The houses are painted following a specific color system dating back to 16th century.',
+ id: 4,
+ name: 'Burano, Italie',
+ description: 'Les maisons sont peintes selon un système de couleurs spécifique datant du XVIe siècle.',
imageId: 'kxsph5C'
}, {
- id: 5,
- name: 'Chefchaouen, Marocco',
- description: 'There are a few theories on why the houses are painted blue, including that the color repells mosquitos or that it symbolizes sky and heaven.',
+ id: 5,
+ name: 'Chefchaouen, Maroc',
+ description: "Plusieurs théories expliquent pourquoi les maisons sont peintes en bleu, notamment parce que cette couleur repousserait les moustiques ou qu'elle symboliserait le ciel et le paradis.",
imageId: 'rTqKo46'
}, {
id: 6,
- name: 'Gamcheon Culture Village in Busan, South Korea',
- description: 'In 2009, the village was converted into a cultural hub by painting the houses and featuring exhibitions and art installations.',
+ name: 'Gamcheon Culture Village à Busan, Corée du Sud',
+ description: 'En 2009, le village a été converti en carrefour culturel en peignant les maisons et en accueillant des expositions et des installations artistiques.',
imageId: 'ZfQOOzf'
}];
```
@@ -1007,9 +1007,9 @@ export function getImageUrl(place) {
```css
ul { list-style-type: none; padding: 0px 10px; }
-li {
- margin-bottom: 10px;
- display: grid;
+li {
+ margin-bottom: 10px;
+ display: grid;
grid-template-columns: auto 1fr;
gap: 20px;
align-items: center;
@@ -1020,9 +1020,9 @@ li {
-Remove `imageSize` prop from all the components.
+Retirez la prop `imageSize` de tous les composants.
-Create and export `ImageSizeContext` from `Context.js`. Then wrap the List into `` to pass the value down, and `useContext(ImageSizeContext)` to read it in the `PlaceImage`:
+Créez et exportez `ImageSizeContext` depuis `Context.js`. Ensuite, enrobez la `List` dans `` pour propager la valeur vers le bas, puis `useContext(ImageSizeContext)` pour la lire dans `PlaceImage` :
@@ -1047,7 +1047,7 @@ export default function App() {
setIsLarge(e.target.checked);
}}
/>
- Use large images
+ Utiliser de grandes images
@@ -1098,38 +1098,38 @@ export const ImageSizeContext = createContext(500);
```js data.js
export const places = [{
id: 0,
- name: 'Bo-Kaap in Cape Town, South Africa',
- description: 'The tradition of choosing bright colors for houses began in the late 20th century.',
+ name: 'Bo-Kaap à Cape Town, Afrique du Sud',
+ description: 'La tradition de choisir des couleurs vives pour les maisons remonte à la fin du XXe siècle.',
imageId: 'K9HVAGH'
}, {
- id: 1,
- name: 'Rainbow Village in Taichung, Taiwan',
- description: 'To save the houses from demolition, Huang Yung-Fu, a local resident, painted all 1,200 of them in 1924.',
+ id: 1,
+ name: 'Rainbow Village à Taichung, Taiwan',
+ description: "Pour sauver les maisons de la démolition, Huang Yung-Fu, un résident de la région, a peint l'ensemble des 1 200 maisons en 1924.",
imageId: '9EAYZrt'
}, {
- id: 2,
- name: 'Macromural de Pachuca, Mexico',
- description: 'One of the largest murals in the world covering homes in a hillside neighborhood.',
+ id: 2,
+ name: 'Macromural de Pachuca, Mexique',
+ description: "L'une des plus grandes fresques murales du monde recouvre les maisons d'un quartier à flanc de colline.",
imageId: 'DgXHVwu'
}, {
- id: 3,
- name: 'Selarón Staircase in Rio de Janeiro, Brazil',
- description: 'This landmark was created by Jorge Selarón, a Chilean-born artist, as a "tribute to the Brazilian people".',
+ id: 3,
+ name: 'Selarón Staircase à Rio de Janeiro, Brésil',
+ description: "Ce monument a été créé par Jorge Selarón, un artiste d'origine chilienne, en guise d’« hommage au people du Brésil ».",
imageId: 'aeO3rpI'
}, {
- id: 4,
- name: 'Burano, Italy',
- description: 'The houses are painted following a specific color system dating back to 16th century.',
+ id: 4,
+ name: 'Burano, Italie',
+ description: 'Les maisons sont peintes selon un système de couleurs spécifique datant du XVIe siècle.',
imageId: 'kxsph5C'
}, {
- id: 5,
- name: 'Chefchaouen, Marocco',
- description: 'There are a few theories on why the houses are painted blue, including that the color repells mosquitos or that it symbolizes sky and heaven.',
+ id: 5,
+ name: 'Chefchaouen, Maroc',
+ description: "Plusieurs théories expliquent pourquoi les maisons sont peintes en bleu, notamment parce que cette couleur repousserait les moustiques ou qu'elle symboliserait le ciel et le paradis.",
imageId: 'rTqKo46'
}, {
id: 6,
- name: 'Gamcheon Culture Village in Busan, South Korea',
- description: 'In 2009, the village was converted into a cultural hub by painting the houses and featuring exhibitions and art installations.',
+ name: 'Gamcheon Culture Village à Busan, Corée du Sud',
+ description: 'En 2009, le village a été converti en carrefour culturel en peignant les maisons et en accueillant des expositions et des installations artistiques.',
imageId: 'ZfQOOzf'
}];
```
@@ -1146,9 +1146,9 @@ export function getImageUrl(place) {
```css
ul { list-style-type: none; padding: 0px 10px; }
-li {
- margin-bottom: 10px;
- display: grid;
+li {
+ margin-bottom: 10px;
+ display: grid;
grid-template-columns: auto 1fr;
gap: 20px;
align-items: center;
@@ -1157,7 +1157,7 @@ li {
-Note how components in the middle don't need to pass `imageSize` anymore.
+Remarquez comme les composants intermédiaires n'ont plus besoin de transmettre `imageSize`.