Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Reusing logic with custom hooks #466

Merged
merged 5 commits into from
May 17, 2023

Conversation

linsolas
Copy link
Contributor

@linsolas linsolas commented May 4, 2023

Traduction de la page Reusing logic with custom hooks.

Pour le titre de la page, je suis parti sur Réutilisation de la logique avec des Hooks personnalisés, mais je pense que je vais plutôt partir sur Factoriser la logique avec des Hooks personnalisés comme indiqué dans le fichier TRANSLATORS.md...

@github-actions
Copy link

github-actions bot commented May 4, 2023

Size changes

📦 Next.js Bundle Analysis for react-dev

This analysis was generated by the Next.js Bundle Analysis action. 🤖

Three Pages Changed Size

The following pages changed size from the code in this PR compared to its base branch:

Page Size (compressed) First Load
/404 76.73 KB (🟡 +12 B) 170.36 KB
/500 76.72 KB (🟡 +12 B) 170.35 KB
/[[...markdownPath]] 78.16 KB (🟡 +12 B) 171.79 KB
Details

Only the gzipped size is provided here based on an expert tip.

First Load is the size of the global bundle plus the bundle for the individual page. If a user were to show up to your website and land on a given page, the first load size represents the amount of javascript that user would need to download. If next/link is used, subsequent page loads would only need to download that page's bundle (the number in the "Size" column), since the global bundle has already been downloaded.

Any third party scripts you have added directly to your app using the <script> tag are not accounted for in this analysis

Next to the size is how much the size has increased or decreased compared with the base branch of this PR. If this percentage has increased by 10% or more, there will be a red status indicator applied, indicating that special attention should be given to this.

@tdd tdd self-requested a review May 6, 2023 10:15
@tdd tdd self-assigned this May 6, 2023
@tdd tdd added Pending Review Un mainteneur qualifié doit encore faire la revue de cette PR scope:required-pages Part of the required translations before we can ship translator:seasoned The author of that translation is a seasoned React docs translator labels May 6, 2023
@tdd tdd added Reviewing Un mainteneur qualifié est en train de composer la revue de code and removed Pending Review Un mainteneur qualifié doit encore faire la revue de cette PR labels May 14, 2023
Copy link
Collaborator

@tdd tdd left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Salut @linsolas !

Avant toute chose, merci pour tout ce boulot ! C'est super cool de nous filer un coup de main à nouveau ; après, tu as commencé par une page monstre, hein, tu aimes les défis 😉 Et du coup gros taf de revue, forcément.

Comme je m'y attendais, c'est globalement très bien, j'apprécie notamment le soin porté à des éléments typographiques (apostrophes notamment). On sent la fatigue s'installer vers la fin, avec davantage de mot-à-mot qui donne des VF ampoulées que j'ai dû davantage reformuler que plus tôt dans le texte.

Attention à "Effet" : c'est capitalisé pour une bonne raison, comme Hook. cf. la page "Synchroniser grâce aux Effets", qui précise bien le distingo. Je n'ai pas corrigé partout, mais je te laisse faire une repasse là-dessus. Idem pour Événement d’Effet (corrigé partout).

Vu que tu m'as déjà soumis une 2e PR, ce serait top si tu pouvais faire un commit d'ajustement qui reprendrait les points pertinents issus de mon feedback ici, comme ça je n'aurais pas à les doubler. Tu me fais un coucou après en commentaire sur la PR en question, et j'attaquerai sa revue à ce moment-là.

Bravo en tout cas pour ce méga taf, globalement très quali ! 👏

Avant de traiter les retours, lis bien TOUT ce message, notamment les consignes d'intégration optimale des retours par lot(s)

Tout est fait sous forme de Suggestions GitHub, il te suffit à chaque suggestion que tu approuves de
cliquer le bouton d'ajout au lot de modifs à committer (pas de commit direct !), et sur la fin de créer le commit groupé. (ce mode de regroupement en un seul commit est à favoriser absolument, mais tu devras aller dans l'onglet Files changed pour y accéder, il n'est pas utilisable dans l’onglet Conversation)

Si certaines appellent discussion, n'hésite pas, tu réponds, on en parle, on avance ensemble 🤝

Quand tout sera bouclé côté code, je ferai une repasse visuelle finale en local avant de fusionner. J'y recalerai si besoin les usual suspects : espaces insécables avant les ponctuations doubles, et apostrophes françaises.

Encore mille mercis, j'ai hâte de voir cette PR finalisée et dans main !

src/content/learn/reusing-logic-with-custom-hooks.md Outdated Show resolved Hide resolved
src/content/learn/reusing-logic-with-custom-hooks.md Outdated Show resolved Hide resolved
src/content/learn/reusing-logic-with-custom-hooks.md Outdated Show resolved Hide resolved
src/content/learn/reusing-logic-with-custom-hooks.md Outdated Show resolved Hide resolved
src/content/learn/reusing-logic-with-custom-hooks.md Outdated Show resolved Hide resolved

You need to implement the `useDelayedValue` custom Hook. Its current implementation returns the `value` provided to it. Instead, you want to return the value back from `delay` milliseconds ago. You might need some state and an Effect to do this.
Vous devez implémenter le Hook personnalisé `useDelayedValue`. Son implémentation actuelle retourne la `value` qui lui a été donnée. À la place, vous voulez retourner la valeur qu’elle valait `delay` millisecondes plus tôt. Vous aurez peut-être besoin d’un état et d’un effet pour ça.
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Vous devez implémenter le Hook personnalisé `useDelayedValue`. Son implémentation actuelle retourne la `value` qui lui a été donnée. À la place, vous voulez retourner la valeur qu’elle valait `delay` millisecondes plus tôt. Vous aurez peut-être besoin d’un état et d’un effet pour ça.
Vous devez implémenter le Hook personnalisé `useDelayedValue`. Son implémentation actuelle retourne la `value` qui lui a été donnée. Au lieu de ça, vous souhaitez retourner la valeur qu’elle avait `delay` millisecondes plus tôt. Vous aurez peut-être besoin d’un état et d’un Effet pour y arriver.


<Hint>

You'll need to store the `delayedValue` as a state variable inside your custom Hook. When the `value` changes, you'll want to run an Effect. This Effect should update `delayedValue` after the `delay`. You might find it helpful to call `setTimeout`.
Vous aurez besoin de stocker `delayedValue` comme variable d’état à l’intérieur de votre Hook. Quand la `value` change, vous devrez exécuter un effet. Cet effet devra mettre à jour `delayedValue` après le `delay`. Vous pouvez trouver utile d’appeler `setTimeout`.
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Vous aurez besoin de stocker `delayedValue` comme variable d’état à l’intérieur de votre Hook. Quand la `value` change, vous devrez exécuter un effet. Cet effet devra mettre à jour `delayedValue` après le `delay`. Vous pouvez trouver utile d’appeler `setTimeout`.
Vous aurez besoin de stocker `delayedValue` comme variable d’état à l’intérieur de votre Hook. Quand la `value` change, vous devrez exécuter un Effet. Cet Effet devra mettre à jour `delayedValue` après le `delay`. Recourir à `setTimeout` pourrait s’avérer utile.


Does this Effect need cleanup? Why or why not?
Est-ce que cet effet a besoin de nettoyage ? Pourquoi ou pourquoi pas ?
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Est-ce que cet effet a besoin de nettoyage ? Pourquoi ou pourquoi pas ?
Est-ce que cet effet a besoin de nettoyage ? Pourquoi (ou pourquoi non) ?

@@ -2408,7 +2409,7 @@ body { min-height: 300px; }

<Solution>

Here is a working version. You keep the `delayedValue` as a state variable. When `value` updates, your Effect schedules a timeout to update the `delayedValue`. This is why the `delayedValue` always "lags behind" the actual `value`.
Voici une version fonctionnelle. Vous conservez `delayedValue` comme variable d’état. Quand `value` change, votre effet planifie un compte à rebours pour mettre à jour `delayedValue`. C’est pourquoi `delayedValue` est toujours « en retard » sur `value`.
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

En temps normal je hurlerais sur "compte à rebours" pour timer (qui est le terme utilisé habituellement pour un setTimeout), mais sur ce coup-là c'est vraiment sympa et adapté 😉

@@ -2485,7 +2486,7 @@ body { min-height: 300px; }

</Sandpack>

Note that this Effect *does not* need cleanup. If you called `clearTimeout` in the cleanup function, then each time the `value` changes, it would reset the already scheduled timeout. To keep the movement continuous, you want all the timeouts to fire.
Notez que cet effet n’a *pas besoin* de nettoyage. Si vous appelez `clearTimeout` dans la fonction de nettoyage, alors à chaque changement de `value`, ça réinitialisera le compte à rebours déjà programmé. Pour garder le mouvement continu, il faut que tous les comptes à rebours soient déclenchés.
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Notez que cet effet n’a *pas besoin* de nettoyage. Si vous appelez `clearTimeout` dans la fonction de nettoyage, alors à chaque changement de `value`, ça réinitialisera le compte à rebours déjà programmé. Pour garder le mouvement continu, il faut que tous les comptes à rebours soient déclenchés.
Notez que cet effet n’a *pas besoin* de nettoyage. Si vous appelez `clearTimeout` dans la fonction de nettoyage, alors à chaque changement de `value`, ça réinitialisera le compte à rebours déjà programmé. Pour obtenir un mouvement continu, il faut que tous les comptes à rebours arrivent à leur terme et déclenchent leur mise à jour associée.

Copy link
Collaborator

@tdd tdd left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Salut @linsolas !

Avant toute chose, merci pour tout ce boulot ! C'est super cool de nous filer un coup de main à nouveau ; après, tu as commencé par une page monstre, hein, tu aimes les défis 😉 Et du coup gros taf de revue, forcément.

Comme je m'y attendais, c'est globalement très bien, j'apprécie notamment le soin porté à des éléments typographiques (apostrophes notamment). On sent la fatigue s'installer vers la fin, avec davantage de mot-à-mot qui donne des VF ampoulées que j'ai dû davantage reformuler que plus tôt dans le texte.

Attention à "Effet" : c'est capitalisé pour une bonne raison, comme Hook. cf. la page "Synchroniser grâce aux Effets", qui précise bien le distingo. Je n'ai pas corrigé partout, mais je te laisse faire une repasse là-dessus. Idem pour Événement d’Effet (corrigé partout).

Vu que tu m'as déjà soumis une 2e PR, ce serait top si tu pouvais faire un commit d'ajustement qui reprendrait les points pertinents issus de mon feedback ici, comme ça je n'aurais pas à les doubler. Tu me fais un coucou après en commentaire sur la PR en question, et j'attaquerai sa revue à ce moment-là.

Bravo en tout cas pour ce méga taf, globalement très quali ! 👏

Avant de traiter les retours, lis bien TOUT ce message, notamment les consignes d'intégration optimale des retours par lot(s)

Tout est fait sous forme de Suggestions GitHub, il te suffit à chaque suggestion que tu approuves de
cliquer le bouton d'ajout au lot de modifs à committer (pas de commit direct !), et sur la fin de créer le commit groupé. (ce mode de regroupement en un seul commit est à favoriser absolument, mais tu devras aller dans l'onglet Files changed pour y accéder, il n'est pas utilisable dans l’onglet Conversation)

Si certaines appellent discussion, n'hésite pas, tu réponds, on en parle, on avance ensemble 🤝

Quand tout sera bouclé côté code, je ferai une repasse visuelle finale en local avant de fusionner. J'y recalerai si besoin les usual suspects : espaces insécables avant les ponctuations doubles, et apostrophes françaises.

Encore mille mercis, j'ai hâte de voir cette PR finalisée et dans main !

@tdd tdd added Reviewed and removed Reviewing Un mainteneur qualifié est en train de composer la revue de code labels May 16, 2023
@linsolas
Copy link
Contributor Author

Merci beaucoup pour ta lecture attentive @tdd !
Comme d'habitude, j'ai l'impression de rendre une bonne copie, mais j'ai encore trop d'erreurs 😉

Je regarde normalement ça ce soir, et je repasserai sur l'autre PR ensuite.
Sauf erreur - et c'est sans doute le cas - j'ai fait bien attention aux espaces insécables (j'en ai même mis dans le texte des codes d'exemples, c'est dire !).

@linsolas
Copy link
Contributor Author

Merci beaucoup @tdd pour ta relecture.
J'ai validé toutes tes suggestions, et je repasserai sur mon autre PR pour changer ce qui doit l'être.
Je te pinguerai sur l'autre PR quand elle sera prête pour relecture.

@tdd tdd merged commit 4d28445 into reactjs:main May 17, 2023
@linsolas linsolas deleted the reusing-logic-with-custom-hooks branch May 17, 2023 12:57
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Reviewed scope:required-pages Part of the required translations before we can ship translator:seasoned The author of that translation is a seasoned React docs translator
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants