Skip to content

Commit a43fb77

Browse files
committed
Déplacement des commits depuis main vers Checkout
1 parent 4f29a01 commit a43fb77

File tree

2 files changed

+66
-4
lines changed

2 files changed

+66
-4
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
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+
}

ssr-testing/app/checkbox/page.tsx

+36-4
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,42 @@
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+
17
import * as React from 'react';
28
import * as Checkbox from '@radix-ui/react-checkbox';
39

410
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+
529
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>
941
);
10-
}
42+
}

0 commit comments

Comments
 (0)