Les composants React sont les éléments constitutifs d'une application React, et ils peuvent être classés en deux types principaux: les composants fonctionnels et les composants de classe.
Composants fonctionnels:
Voici un exemple de base d'un composant fonctionnel:
<code class="javascript">function Welcome(props) { return <h1>Hello, {props.name}</h1>; }</code>
Composants de classe:
React.Component
.this
pour accéder aux accessoires, à l'état et aux méthodes de cycle de vie.componentDidMount
, componentDidUpdate
et componentWillUnmount
, qui sont utilisés pour gérer le cycle de vie du composant.Voici un exemple de base d'un composant de classe:
<code class="javascript">class Welcome extends React.Component { render() { return <h1>Hello, {this.props.name}</h1>; } }</code>
Le choix entre les composants fonctionnels et la classe dépend en grande partie de la version de React que vous utilisez et des besoins spécifiques de votre composant.
Utilisez des composants fonctionnels lorsque:
useState
, useEffect
, useContext
, etc., rendent les composants fonctionnels plus puissants et polyvalents.this
et les méthodes de cycle de vie, qui peuvent être sujettes aux erreurs dans les composants de la classe.Utilisez des composants de classe lorsque:
getDerivedStateFromProps
ou getSnapshotBeforeUpdate
.Dans le développement de la réaction moderne, les composants fonctionnels avec des crochets sont généralement préférés en raison de leur simplicité et de la capacité de gérer toutes les fonctionnalités qui étaient auparavant exclusives aux composants de classe.
La gestion de l'État dans React a évolué de manière significative avec l'introduction de crochets, affectant la façon dont l'état est géré dans les composants fonctionnels et de classe.
État dans les composants de la classe:
state
, qui est initialisé dans le constructeur.this.state
et this.setState()
.this.setState()
est asynchrone et peut accepter une fonction de rappel à exécuter après la mise à jour de l'état.Exemple:
<code class="javascript">class Counter extends React.Component { constructor(props) { super(props); this.state = { count: 0 }; } increment = () => { this.setState({ count: this.state.count 1 }); } render() { return ( <div> <p>Count: {this.state.count}</p> <button onclick="{this.increment}">Increment</button> </div> ); } }</code>
État dans les composants fonctionnels:
useState
pour gérer l'état.useState
renvoie une variable d'état et une fonction pour la mettre à jour.Exemple:
<code class="javascript">function Counter() { const [count, setCount] = useState(0); const increment = () => { setCount(count 1); } return ( <div> <p>Count: {count}</p> <button onclick="{increment}">Increment</button> </div> ); }</code>
Les principales différences comprennent:
this.state
et this.setState()
, tandis que les composants fonctionnels utilisent des crochets comme useState
.this.setState()
dans les composants de la classe est asynchrone, tandis que les mises à jour avec useState
sont synchrones.useEffect
dans le même but.L'optimisation des performances des composants React est cruciale pour la construction d'applications efficaces. Les composants fonctionnels avec des crochets offrent plusieurs avantages par rapport aux composants de la classe à cet égard.
Mémuisation avec useMemo
et useCallback
:
useMemo
pour mémoriser des calculs coûteux et useCallback
pour mémoriser les fonctions. Cela empêche les redevateurs inutiles en empêchant le recalcul des valeurs ou la recréation des fonctions. Exemple avec useMemo
:
<code class="javascript">function MyComponent({ prop }) { const expensiveResult = useMemo(() => computeExpensiveValue(prop), [prop]); return <div>{expensiveResult}</div>; }</code>
shouldComponentUpdate
ou utiliser React.memo
. Éviter les redevances inutiles avec React.memo
:
React.memo
peut être utilisé pour mémoriser les composants fonctionnels, empêchant les redevances inutiles si les accessoires n'ont pas changé.Exemple:
<code class="javascript">const MyComponent = React.memo(function MyComponent(props) { // Component implementation });</code>
PureComponent
ou implémenter shouldComponentUpdate
pour obtenir des résultats similaires, mais ces méthodes sont moins flexibles que React.memo
. Optimisation des mises à jour d'état avec useState
et useReducer
:
useState
et useReducer
peuvent être utilisés en conjonction avec useCallback
pour s'assurer que les rappels ne provoquent pas de redevateurs inutiles. Exemple avec useReducer
:
<code class="javascript">const initialState = { count: 0 }; function reducer(state, action) { switch (action.type) { case 'increment': return { count: state.count 1 }; default: throw new Error(); } } function Counter() { const [state, dispatch] = useReducer(reducer, initialState); return ( Count: {state.count} <button onclick="{()"> dispatch({ type: 'increment' })}> </button> > ); }</code>
this.setState()
, qui peuvent être moins efficaces en termes de réglage des performances. Optimisation du cycle de vie avec useEffect
:
useEffect
dans les composants fonctionnels permet un contrôle à grain fin sur les effets secondaires, y compris les mises à jour basées sur le nettoyage et la dépendance.Exemple:
<code class="javascript">function MyComponent() { useEffect(() => { // Side effect code here return () => { // Cleanup code here }; }, [/* dependencies */]); // Component implementation }</code>
En résumé, les composants fonctionnels avec des crochets offrent des moyens plus flexibles et efficaces d'optimiser les performances par rapport aux composants de la classe. En tirant parti des crochets comme useMemo
, useCallback
et useEffect
, les développeurs peuvent obtenir de meilleures performances avec moins de code BULERLAT.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!