Vous avez la bonne idée. Optez pour la fonctionnalité si votre composant ne fait pas beaucoup plus que de prendre en charge certains accessoires et de rendre. Vous pouvez les considérer comme des fonctions pures car elles seront toujours restituées et se comporteront de la même manière, étant donné les mêmes accessoires. De plus, ils ne se soucient pas des méthodes de cycle de vie ou n'ont pas leur propre état interne.
Parce qu'ils sont légers, l'écriture de ces composants simples en tant que composants fonctionnels est assez standard.
Si vos composants ont besoin de plus de fonctionnalités, comme garder l'état, utilisez plutôt des classes.
Plus d'informations: https://facebook.github.io/react/docs/reusable-components.html#es6-classes
EDIT : Une grande partie de ce qui précède était vraie, jusqu'à l'introduction de React Hooks.
componentDidUpdate
peut être répliqué avec useEffect(fn)
, où fn
est la fonction à exécuter lors du rendu.
componentDidMount
Les méthodes peuvent être répliquées avec useEffect(fn, [])
, où fn
est la fonction à exécuter lors du rendu, et []
est un tableau d'objets pour lesquels le composant sera rendu, si et seulement si au moins un a changé de valeur depuis le rendu précédent. Comme il n'y en a pas, useEffect()
s'exécute une fois, sur la première monture.
state
peut être répliqué avec useState()
, dont la valeur de retour peut être déstructurée en une référence de l'état et une fonction qui peut définir l'état (c.-à const [state, setState] = useState(initState)
-d.). Un exemple pourrait expliquer cela plus clairement:
const Counter = () => {
const [count, setCount] = useState(0)
const increment = () => {
setCount(count + 1);
}
return (
<div>
<p>Count: {count}</p>
<button onClick={increment}>+</button>
</div>
)
}
default export Counter
En ce qui concerne la recommandation sur le moment d'utiliser la classe sur les composants fonctionnels, Facebook recommande officiellement d' utiliser des composants fonctionnels dans la mesure du possible . En passant, j'ai entendu un certain nombre de personnes discuter de ne pas utiliser de composants fonctionnels pour des raisons de performances, en particulier que
"Les fonctions de gestion des événements sont redéfinies par rendu dans les composants fonctionnels"
Bien que cela soit vrai, veuillez considérer si vos composants sont vraiment rendus à une vitesse ou un volume tels que cela vaudrait la peine.
Si tel est le cas, vous pouvez empêcher la redéfinition des fonctions à l'aide de useCallback
et useMemo
hooks. Cependant, gardez à l'esprit que cela peut rendre votre code (microscopiquement) moins performant .
Mais honnêtement, je n'ai jamais entendu parler de la redéfinition des fonctions comme un goulot d'étranglement dans les applications React. Les optimisations prématurées sont à l'origine de tous les maux - inquiétez-vous quand c'est un problème