File tree 2 files changed +66
-4
lines changed
2 files changed +66
-4
lines changed Original file line number Diff line number Diff line change
1
+ // Ce fichier est une implémentation du problème de base
2
+ // Il génère une erreur "infinite depth"
3
+ // Pour tester le problème, il faut renommer le fichier en page.tsx
4
+
5
+ 'use client' ;
6
+
7
+ import * as React from 'react' ;
8
+ import * as Checkbox from '@radix-ui/react-checkbox' ;
9
+
10
+ export default function Page ( ) {
11
+ // État (booléen) associé à la checkbox et au div
12
+ const [ isChecked , setIsChecked ] = React . useState ( false ) ;
13
+
14
+ // Fonction pour alterner l’état de la checkbox
15
+ const handleCheckedChange = ( newChecked : boolean ) => {
16
+ console . log ( 'Checkbox checked:' , newChecked ) ; // Affiche l'état dans la console
17
+ setIsChecked ( newChecked ) ;
18
+ } ;
19
+
20
+ return (
21
+ < form >
22
+ < div onClick = { ( ) => setIsChecked ( ( prev ) => ! prev ) } > { /* Alterne l’état*/ }
23
+ < Checkbox . Root checked = { isChecked } onCheckedChange = { handleCheckedChange } > { /* Associe l'état de la checkbox et la fonction d'inversion de l'état*/ }
24
+ [ < Checkbox . Indicator > ✔</ Checkbox . Indicator > ]
25
+ </ Checkbox . Root >
26
+ < span > test</ span >
27
+ </ div >
28
+ </ form >
29
+ ) ;
30
+ }
Original file line number Diff line number Diff line change
1
+ // Ce fichier est une implémentation de la solution que nous proposons
2
+ // Il dissocie l'état de la checkbox et du div
3
+ // Le problème "infinite depth" est résolu tout en laissant le div cliquable
4
+
5
+ 'use client' ;
6
+
1
7
import * as React from 'react' ;
2
8
import * as Checkbox from '@radix-ui/react-checkbox' ;
3
9
4
10
export default function Page ( ) {
11
+ // État pour le div
12
+ const [ isDivChecked , setIsDivChecked ] = React . useState ( false ) ;
13
+
14
+ // État pour la case à cocher
15
+ const [ isCheckboxChecked , setIsCheckboxChecked ] = React . useState ( false ) ;
16
+
17
+ // Fonction pour alterner l’état du div
18
+ const handleDivClick = ( ) => {
19
+ console . log ( 'Div clicked:' , ! isDivChecked ) ;
20
+ setIsDivChecked ( ( prev ) => ! prev ) ;
21
+ } ;
22
+
23
+ // Fonction pour alterner l’état de la checkbox
24
+ const handleCheckedChange = ( newChecked : boolean ) => {
25
+ console . log ( 'Checkbox checked:' , newChecked ) ;
26
+ setIsCheckboxChecked ( newChecked ) ;
27
+ } ;
28
+
5
29
return (
6
- < Checkbox . Root >
7
- [ < Checkbox . Indicator > ✔</ Checkbox . Indicator > ]
8
- </ Checkbox . Root >
30
+ < form >
31
+ < div onClick = { handleDivClick } > { /* Alterne l’état du div */ }
32
+ < Checkbox . Root
33
+ checked = { isCheckboxChecked }
34
+ onCheckedChange = { handleCheckedChange } // Alterne l’état de la checkbox
35
+ >
36
+ [ < Checkbox . Indicator > ✔</ Checkbox . Indicator > ]
37
+ </ Checkbox . Root >
38
+ < span > test</ span >
39
+ </ div >
40
+ </ form >
9
41
) ;
10
- }
42
+ }
You can’t perform that action at this time.
0 commit comments