diff --git a/ssr-testing/app/checkbox/exemple_probleme.tsx b/ssr-testing/app/checkbox/exemple_probleme.tsx new file mode 100644 index 0000000000..25c6472e81 --- /dev/null +++ b/ssr-testing/app/checkbox/exemple_probleme.tsx @@ -0,0 +1,30 @@ +// Ce fichier est une implémentation du problème de base +// Il génère une erreur "infinite depth" +// Pour tester le problème, il faut renommer le fichier en page.tsx + +'use client'; + +import * as React from 'react'; +import * as Checkbox from '@radix-ui/react-checkbox'; + +export default function Page() { + // État (booléen) associé à la checkbox et au div + const [isChecked, setIsChecked] = React.useState(false); + + // Fonction pour alterner l’état de la checkbox + const handleCheckedChange = (newChecked: boolean) => { + console.log('Checkbox checked:', newChecked); // Affiche l'état dans la console + setIsChecked(newChecked); + }; + + return ( +
+
setIsChecked((prev) => !prev)}> {/* Alterne l’état*/} + {/* Associe l'état de la checkbox et la fonction d'inversion de l'état*/} + [ ] + + test +
+
+ ); +} \ No newline at end of file diff --git a/ssr-testing/app/checkbox/page.tsx b/ssr-testing/app/checkbox/page.tsx index 3632874437..a4af257ef5 100644 --- a/ssr-testing/app/checkbox/page.tsx +++ b/ssr-testing/app/checkbox/page.tsx @@ -1,10 +1,42 @@ +// Ce fichier est une implémentation de la solution que nous proposons +// Il dissocie l'état de la checkbox et du div +// Le problème "infinite depth" est résolu tout en laissant le div cliquable + +'use client'; + import * as React from 'react'; import * as Checkbox from '@radix-ui/react-checkbox'; export default function Page() { + // État pour le div + const [isDivChecked, setIsDivChecked] = React.useState(false); + + // État pour la case à cocher + const [isCheckboxChecked, setIsCheckboxChecked] = React.useState(false); + + // Fonction pour alterner l’état du div + const handleDivClick = () => { + console.log('Div clicked:', !isDivChecked); + setIsDivChecked((prev) => !prev); + }; + + // Fonction pour alterner l’état de la checkbox + const handleCheckedChange = (newChecked: boolean) => { + console.log('Checkbox checked:', newChecked); + setIsCheckboxChecked(newChecked); + }; + return ( - - [ ] - +
+
{/* Alterne l’état du div */} + + [ ] + + test +
+
); -} +} \ No newline at end of file