Jusqu'à présent, nous étions habitués à Flux de flux où les données entrées dans le composant via des accessoires. Vous pouvez donc regarder la signature Props et voir quelles sont les exigences des composants.
Les crochets sont une fonctionnalité étonnante, mais au fur et à mesure que nous passons à eux, je trouve qu'ils fournissent une autre entrée pour les dépendances qui est plus difficile à gérer car vous devez regarder le code du composant réel pour le voir.
Bien sûr, nous ne pouvons utiliser des crochets que dans les composants de conteneurs, mais je pense que certains de leurs principaux arguments de vente sont leur capacité à réduire l'emboîtement et le HOC.
Quelles sont les meilleures pratiques (actuellement) pour décider quel composant doit utiliser un crochet et lequel doit utiliser des accessoires de rendu?
Et selon les React FAQs hooks peut être utilisé comme alternative à renderProps
et HOCs
, mais peut coexister avec eux
Souvent, les accessoires de rendu et les composants d'ordre supérieur ne rendent qu'un seul enfant. Nous pensons que les crochets sont un moyen plus simple de servir ce cas d'utilisation. Il y a toujours une place pour les deux modèles (par exemple, un composant de scroller virtuel peut avoir un accessoire renderItem, ou un composant conteneur visuel peut avoir sa propre structure DOM). Mais dans la plupart des cas, les crochets seront suffisants et peuvent aider à réduire la nidification dans votre arbre.
Les crochets permettent une logique avec état dans les composants fonctionnels et seraient similaires aux composants de classe dans React.
Les crochets sont plus difficiles à gérer car vous devez regarder le code du composant réel pour le voir.
Pas vraiment, car vous pouvez extraire la logique personnalisée que vous avez dans vos HOC ou renderProps dans un hook personnalisé et rechercher son implémentation au lieu de comprendre ce qui se passe réellement dans le composant réel.
Les crochets et les HOC sont des modèles de programmation différents, et les comparer semblera être une comparaison des oranges et des pommes.
TL; DR
En règle générale, j'utilise des HOC lorsque je veux un rendu conditionnel des composants (si condition: rendu A, sinon rendu B), sinon, j'utilise des crochets. Ce n'est que mon opinion.
HOCs Pros
Contre HOC
x
.HOCs Pro & Con tous les deux
Hooks Pros
Inconvénients des crochets
Une chose que je vois souvent est d'utiliser des crochets avec des effets secondaires dans un composant. Cela rend votre composant plus difficile à tester et n'est pas un bon cas d'utilisation pour les crochets à mon humble avis.
Par exemple, vous créez un composant avec une const {data, loading, error} = useFetch(endpointUrl)
personnalisée, puis vous l'utilisez directement dans la partie de rendu return <>{data.name}</>
du même composant.
Pour moi, c'est toujours un cas d'utilisation pour un HOC. Chargez les données dans un HOC, fournissez-les en tant que propriétés à votre composant de vidage d'image fixe. De cette façon, vous pouvez tester le composant plus facilement et vous séparez toujours les problèmes.