Maison > Questions et réponses > le corps du texte
P粉8100506692023-09-02 12:43:37
Pourquoi vous ne pouvez pas appeler des hooks à l'intérieur d'un hook - allez ici pour une plongée très approfondie avec plus de contexte que ce dont j'ai besoin de fournir dans cette réponse https://overreacted.io/why-do-hooks-rely-on -call -commander/
Votre solution fonctionne car malgré le fait de "enfreindre les règles", l'ordre des appels aux hooks est toujours le même... jusqu'à ce que l'utilisateur soit ajouté ou supprimé de l'état.
Vous pouvez certainement utiliser la solution que vous avez écrite. Mais que se passe-t-il si vous devez modifier le nombre d'utilisateurs ?
Non, vous ne pouvez pas utiliser de crochets à l’intérieur des crochets. Cela pourrait « fonctionner », mais React vous dit que cela ne fonctionne pas de manière fiable et que vous le faites mal. Le hook doit être appelé au niveau supérieur du composant de niveau supérieur du hook personnalisé.
Vous êtes dans la bonne direction, mais la solution au problème est
div
pour vous indiquer sur quel élément utilisateur a été cliqué. Cela ressemble à ceci :
function Application() { const [users, setUsers] = React.useState([ { id: 1, name: 'John Doe #1' }, { id: 2, name: 'John Doe #2' }, { id: 3, name: 'John Doe #3' }, ]); const [selectedUserId, setSelectedUserId] = React.useState(null); // this callback is referentially stable - it doesn't change between renders because it has no dependencies const handleSelectUser = React.useCallback((e) => { setSelectedUserId(+e.target.getAttribute('data-userid')); }, []); return users.map((user) => { const isSelected = selectedUserId === user.id; return ( <User {...user} data-userid={user.id} <- this line key={user.id} isSelected={isSelected} onClick={handleSelectUser} /> ); }); }