Les crochets ont pris d'assaut le monde React. Dans ce tutoriel, nous allons examiner ce que sont les crochets et comment vous les utilisez. Je vous présenterai certains crochets communs qui expédient avec React, tout en vous montrant comment rédiger le vôtre. Au moment où vous avez terminé, vous pourrez utiliser des crochets dans vos propres projets React.
REACT Les crochets sont des fonctions spéciales qui vous permettent de «connecter» les fonctionnalités de réaction dans les composants de la fonction. Par exemple, le crochet UseState vous permet d'ajouter l'état, tandis que Use Effect vous permet d'effectuer des effets secondaires. Auparavant, les effets secondaires ont été mis en œuvre à l'aide de méthodes de cycle de vie. Avec les crochets, ce n'est plus nécessaire.
Cela signifie que vous n'avez plus besoin de définir une classe lors de la construction d'un composant React. Il s'avère que l'architecture de classe utilisée dans React est la cause de nombreux défis auxquels les développeurs réagissent chaque jour. Nous nous retrouvons souvent à écrire de grands composants complexes difficiles à briser. Le code connexe est réparti sur plusieurs méthodes de cycle de vie, qui devient difficile à lire, à maintenir et à tester. De plus, nous devons faire face à ce mot clé lors de l'accès à l'état, aux accessoires et aux méthodes. Nous devons également lier des méthodes à cela pour nous assurer qu'ils sont accessibles dans le composant. Ensuite, nous avons le problème excessif du forage des accessoires - également connu sous le nom de Wrapper Hell - lorsqu'ils traitent des composants d'ordre supérieur.
En un mot, les crochets sont une fonctionnalité révolutionnaire qui simplifiera votre code, ce qui facilite la lecture, le maintien, le test de manière isolée et réutilisée dans vos projets. Cela ne vous prendra qu'une heure pour vous familiariser, mais cela vous fera réfléchir différemment sur la façon dont vous écrivez le code React.
React Hooks a été annoncé pour la première fois lors d'une conférence React qui s'est tenue en octobre 2018, et ils ont été officiellement mis à disposition dans React 16.8. La fonctionnalité est toujours en cours de développement; Il y a encore un certain nombre de fonctionnalités de la classe React qui sont migrées dans des crochets. La bonne nouvelle est que vous pouvez commencer à les utiliser maintenant. Vous pouvez toujours utiliser React Class Components si vous le souhaitez, mais je doute que vous voudrez après avoir lu ce guide d'introduction.
Si j'ai piqué votre curiosité, plongeons-nous et voyons quelques exemples pratiques.
Ce tutoriel est destiné aux personnes qui ont une compréhension de base de ce qu'est la réaction et de la façon dont il fonctionne. Si vous êtes un débutant React, veuillez consulter notre tutoriel de démarrage avec React avant de continuer ici.
Si vous souhaitez suivre les exemples, vous devriez avoir une application React déjà configurée. La façon la plus simple de le faire est avec l'outil Create React App. Pour l'utiliser, vous aurez installé le nœud et le NPM. Si vous ne l'avez pas fait, rendez-vous sur la page de téléchargement de Node.js et prenez la dernière version de votre système (NPM est livré avec un nœud). Alternativement, vous pouvez consulter notre tutoriel sur l'installation de nœud à l'aide d'un gestionnaire de version.
Avec le nœud installé, vous pouvez créer une nouvelle application React comme SO:
npx create-react-app myapp
Cela créera un dossier MyApp. Changez dans ce dossier et démarrez le serveur de développement comme ainsi:
<span>cd myapp </span><span>npm start </span>
Votre navigateur par défaut s'ouvrira et vous verrez votre nouvelle application React. Aux fins de ce tutoriel, vous pouvez travailler dans le composant de l'application, qui est situé sur src / app.js.
Vous pouvez également trouver le code de ce tutoriel sur GitHub, ainsi qu'une démo du code fini à la fin de ce tutoriel.
Regardons maintenant un code. Le crochet UseState est probablement le crochet le plus courant qui expédie avec React. Comme son nom l'indique, il vous permet d'utiliser l'état dans un composant de fonction.
Considérons le composant de classe React suivante:
<span>import <span>React</span> from "react"; </span> <span>export default class ClassDemo extends React<span>.Component</span> { </span> <span>constructor(props) { </span> <span>super(props); </span> <span>this.state = { </span> <span>name: "Agata" </span> <span>}; </span> <span>this.handleNameChange = this.handleNameChange.bind(this); </span> <span>} </span> <span>handleNameChange(e) { </span> <span>this.setState({ </span> <span>name: e.target.value </span> <span>}); </span> <span>} </span> <span>render() { </span> <span>return ( </span> <span><section> </span> <span><form autoComplete="off"> </span> <span><section> </span> <span><label htmlFor="name">Name</label> </span> <span><input </span> type<span>="text" </span> name<span>="name" </span> id<span>="name" </span> value<span>={this.state.name} </span> onChange<span>={this.handleNameChange} </span> <span>/> </span> <span></section> </span> <span></form> </span> <span><p>Hello {this.state.name}</p> </span> <span></section> </span> <span>); </span> <span>} </span><span>} </span>
Si vous suivez avec Créer une application React, remplacez simplement le contenu d'App.js par ce qui précède.
C'est à quoi ça ressemble:
Donnez-vous une minute pour comprendre le code. Dans le constructeur, nous déclarons une propriété de nom sur notre objet d'état, ainsi que la liaison d'une fonction HandlenameChange à l'instance du composant. Nous avons ensuite un formulaire avec une entrée, dont la valeur est définie sur ce.state.name. La valeur maintenue dans ce.state.name est également sortie à la page sous forme de salutation.
Lorsqu'un utilisateur tape n'importe quoi dans le champ de saisie, la fonction HandlenameChange est appelée, qui met à jour l'état et par conséquent la salutation.
Maintenant, nous allons écrire une nouvelle version de ce code à l'aide du crochet UseState. Sa syntaxe ressemble à ceci:
npx create-react-app myapp
Lorsque vous appelez la fonction UseState, il renvoie deux éléments:
Le stade initial est la valeur par défaut que vous donnez à votre état nouvellement déclaré pendant la phase de déclaration de l'état. Maintenant que vous avez une idée de ce qu'est Usestate, mettons-le en action:
<span>cd myapp </span><span>npm start </span>
Prenez note des différences entre cette version de fonction et la version de classe. Il est déjà beaucoup plus compact et plus facile à comprendre que la version de classe, mais ils font exactement la même chose. Passons en revue les différences:
J'espère que vous êtes impressionné maintenant! Vous vous demandez peut-être quoi faire lorsque vous devez déclarer plusieurs valeurs d'état. La réponse est assez simple: appelez simplement un autre crochet UseState. Vous pouvez déclarer autant de fois que vous le souhaitez, à condition que vous ne compliciez pas votre composant.
Remarque: Lorsque vous utilisez des crochets React, assurez-vous de les déclarer en haut de votre composant et jamais à l'intérieur d'un conditionnel.
Mais que se passe-t-il si nous voulons déclarer plus d'une propriété en état? Aucun problème. Utilisez simplement plusieurs appels pour UseState.
Voici un exemple de composant avec plusieurs crochets UseState:
<span>import <span>React</span> from "react"; </span> <span>export default class ClassDemo extends React<span>.Component</span> { </span> <span>constructor(props) { </span> <span>super(props); </span> <span>this.state = { </span> <span>name: "Agata" </span> <span>}; </span> <span>this.handleNameChange = this.handleNameChange.bind(this); </span> <span>} </span> <span>handleNameChange(e) { </span> <span>this.setState({ </span> <span>name: e.target.value </span> <span>}); </span> <span>} </span> <span>render() { </span> <span>return ( </span> <span><section> </span> <span><form autoComplete="off"> </span> <span><section> </span> <span><label htmlFor="name">Name</label> </span> <span><input </span> type<span>="text" </span> name<span>="name" </span> id<span>="name" </span> value<span>={this.state.name} </span> onChange<span>={this.handleNameChange} </span> <span>/> </span> <span></section> </span> <span></form> </span> <span><p>Hello {this.state.name}</p> </span> <span></section> </span> <span>); </span> <span>} </span><span>} </span>
assez simple, n'est-ce pas? Faire la même chose dans la version de la classe vous obligerait à utiliser encore plus le mot clé.
Maintenant, passons au prochain crochet de base.
La plupart des composants de réaction sont nécessaires pour effectuer une opération spécifique telle que la récupération des données, l'abonnement à un flux de données ou la modification manuelle du DOM. Ce type d'opérations est connu sous le nom d'effets secondaires.
Dans les composants basés sur la classe, nous mettons normalement notre code d'effets secondaires dans ComponentDidMount et ComponentDiDupDate. Ce sont des méthodes de cycle de vie qui nous permettent de déclencher la méthode de rendu au bon moment.
Voici un exemple simple:
npx create-react-app myapp
Ce morceau de code définira le titre du document, en fonction de ce qui est maintenu dans l'état. Cependant, lorsque vous essayez d'apporter des modifications aux valeurs d'état via le formulaire, rien ne se passe. Pour résoudre ce problème, vous devez ajouter une autre méthode de cycle de vie:
<span>cd myapp </span><span>npm start </span>
La mise à jour du formulaire devrait maintenant mettre à jour le titre du document également.
Voyons comment nous pouvons implémenter la même logique à l'aide du crochet USEEFECT. Mettez à jour le composant de fonction ci-dessus comme suit:
<span>import <span>React</span> from "react"; </span> <span>export default class ClassDemo extends React<span>.Component</span> { </span> <span>constructor(props) { </span> <span>super(props); </span> <span>this.state = { </span> <span>name: "Agata" </span> <span>}; </span> <span>this.handleNameChange = this.handleNameChange.bind(this); </span> <span>} </span> <span>handleNameChange(e) { </span> <span>this.setState({ </span> <span>name: e.target.value </span> <span>}); </span> <span>} </span> <span>render() { </span> <span>return ( </span> <span><section> </span> <span><form autoComplete="off"> </span> <span><section> </span> <span><label htmlFor="name">Name</label> </span> <span><input </span> type<span>="text" </span> name<span>="name" </span> id<span>="name" </span> value<span>={this.state.name} </span> onChange<span>={this.handleNameChange} </span> <span>/> </span> <span></section> </span> <span></form> </span> <span><p>Hello {this.state.name}</p> </span> <span></section> </span> <span>); </span> <span>} </span><span>} </span>
Avec seulement ces quelques lignes de code, nous avons implémenté le travail de deux méthodes de cycle de vie dans une fonction simple.
C'était un exemple simple. Cependant, il y a des cas où vous devez rédiger du code de nettoyage, tel que le désabonnement à partir d'un flux de données ou la non-inscription d'un écouteur d'événements. Voyons un exemple de la façon dont cela est normalement implémenté dans un composant de classe React:
<span>const [state, setState] = useState(initialState); </span>
Le code ci-dessus affichera la résolution actuelle de la fenêtre de votre navigateur. Redimensionner la fenêtre et vous devriez voir la mise à jour des numéros automatiquement. Si vous appuyez sur F11 dans Chrome, il devrait afficher la résolution complète de votre moniteur. Nous avons également utilisé le composant de la méthode du cycle de viewillunmount pour désinscrire l'événement de redimensionnement.
Réplivons le code basé sur la classe ci-dessus dans notre version de crochet. Nous devons définir un troisième crochet USSTATE et un deuxième crochet d'usage pour gérer cette nouvelle fonctionnalité:
<span>import <span>React, { useState }</span> from "react"; </span> <span>export default function <span>HookDemo</span>(props) { </span> <span>const [name, setName] = useState("Agata"); </span> <span>function handleNameChange(e) { </span> <span>setName(e.target.value); </span> <span>} </span> <span>return ( </span> <span><section> </span> <span><form autoComplete="off"> </span> <span><section> </span> <span><label htmlFor="name">Name</label> </span> <span><input </span> type<span>="text" </span> name<span>="name" </span> id<span>="name" </span> value<span>={name} </span> onChange<span>={handleNameChange} </span> <span>/> </span> <span></section> </span> <span></form> </span> <span><p>Hello {name}</p> </span> <span></section> </span> <span>); </span><span>} </span>
étonnamment, cette version de crochet du code fait exactement la même chose. C'est plus propre et plus compact. L'avantage de mettre du code dans sa propre déclaration d'effet d'utilisation est que nous pouvons facilement le tester, car le code est isolément.
Avez-vous remarqué que nous renvoyons une fonction dans ce crochet Utilisation? En effet, toute fonction que vous retournez dans une fonction UseEffecte sera considérée comme le code pour le nettoyage. Si vous ne renvoyez pas de fonction, aucun nettoyage ne sera effectué. Dans ce cas, un nettoyage est requis, car vous rencontrerez autrement un message d'erreur enregistré à votre console de navigateur disant "ne peut pas effectuer une mise à jour de l'état React sur un composant non monté".
Maintenant que vous avez appris sur les crochets UseState et utilisez des crochets, permettez-moi de vous montrer une façon vraiment cool de rendre votre code encore plus compact, plus propre et réutilisable que ce que nous avons réussi jusqu'à présent. Nous allons créer un Hook personnalisé pour simplifier encore plus notre code.
Nous allons le faire en extraitant la fonctionnalité de redimensionnement et en le plaçant en dehors de notre composant.
Créez une nouvelle fonction comme suit:
<span>import <span>React, { useState }</span> from "react"; </span> <span>export default function <span>HookDemo</span>(props) { </span> <span>const [name, setName] = useState("Agata"); </span> <span>const [location, setLocation] = useState("Nairobi"); </span> <span>function handleNameChange(e) { </span> <span>setName(e.target.value); </span> <span>} </span> <span>function handleLocationChange(e) { </span> <span>setLocation(e.target.value); </span> <span>} </span> <span>return ( </span> <span><section> </span> <span><form autoComplete="off"> </span> <span><section> </span> <span><label htmlFor="name">Name</label> </span> <span><input </span> type<span>="text" </span> name<span>="name" </span> id<span>="name" </span> value<span>={name} </span> onChange<span>={handleNameChange} </span> <span>/> </span> <span></section> </span> <span><section> </span> <span><label htmlFor="location">Location</label> </span> <span><input </span> type<span>="text" </span> name<span>="location" </span> id<span>="location" </span> value<span>={location} </span> onChange<span>={handleLocationChange} </span> <span>/> </span> <span></section> </span> <span></form> </span> <span><p> </span> <span>Hello {name} from {location} </span> <span></p> </span> <span></section> </span> <span>); </span><span>} </span>
Ensuite, dans le composant, vous devrez remplacer ce code:
<span>componentDidMount() { </span> <span>document.title = this.state.name + " from " + this.state.location; </span><span>} </span>
… avec ceci:
<span>componentDidUpdate() { </span> <span>document.title = this.state.name + " from " + this.state.location; </span><span>} </span>
Supprimez le deuxième code d'usage. Enregistrez votre fichier et testez-le. Tout devrait fonctionner de la même manière qu'auparavant.
Maintenant que nous avons créé notre premier crochet personnalisé, faisons de même pour le titre du document. Tout d'abord, supprimez l'appel restant à utiliser Effectif à l'intérieur du composant. Ensuite, en dehors du composant, ajoutez le code suivant:
npx create-react-app myapp
Enfin, appelez-le depuis le composant:
<span>cd myapp </span><span>npm start </span>
Retournez à votre navigateur et entrez quelque chose dans les champs d'entrée. Le titre du document devrait changer comme avant.
Enfin, refactorons les champs de forme. Nous voulons créer un crochet pour maintenir leur valeur en synchronisation avec une valeur correspondante à l'état.
Commençons par le crochet personnalisé. Ajoutez ce qui suit en dehors du composant:
<span>import <span>React</span> from "react"; </span> <span>export default class ClassDemo extends React<span>.Component</span> { </span> <span>constructor(props) { </span> <span>super(props); </span> <span>this.state = { </span> <span>name: "Agata" </span> <span>}; </span> <span>this.handleNameChange = this.handleNameChange.bind(this); </span> <span>} </span> <span>handleNameChange(e) { </span> <span>this.setState({ </span> <span>name: e.target.value </span> <span>}); </span> <span>} </span> <span>render() { </span> <span>return ( </span> <span><section> </span> <span><form autoComplete="off"> </span> <span><section> </span> <span><label htmlFor="name">Name</label> </span> <span><input </span> type<span>="text" </span> name<span>="name" </span> id<span>="name" </span> value<span>={this.state.name} </span> onChange<span>={this.handleNameChange} </span> <span>/> </span> <span></section> </span> <span></form> </span> <span><p>Hello {this.state.name}</p> </span> <span></section> </span> <span>); </span> <span>} </span><span>} </span>
puis mettez à jour le composant pour l'utiliser:
<span>const [state, setState] = useState(initialState); </span>
Parcourez lentement le code et identifiez toutes les modifications que nous avons apportées. Assez soigné, non? Notre composant est beaucoup plus compact.
Pour les fins de ce tutoriel, nous avons déclaré nos crochets en fonction du même fichier que le composant qui les utilise. Cependant, dans un projet React normal, vous auriez un dossier Hooks avec chacun de ces crochets dans un fichier séparé, qui pourrait ensuite être importé partout où il était nécessaire.
Nous pourrions même aller jusqu'à emballer les crochets UseFormInput, usageSocumentTitle et UsewindowResolution dans un module NPM externe, car ils sont complètement indépendants de la logique principale de notre code. Nous pouvons facilement réutiliser ces crochets personnalisés dans d'autres parties du projet, ou même d'autres projets à l'avenir.
Pour référence, voici la version complète du composant Hooks:
<span>import <span>React, { useState }</span> from "react"; </span> <span>export default function <span>HookDemo</span>(props) { </span> <span>const [name, setName] = useState("Agata"); </span> <span>function handleNameChange(e) { </span> <span>setName(e.target.value); </span> <span>} </span> <span>return ( </span> <span><section> </span> <span><form autoComplete="off"> </span> <span><section> </span> <span><label htmlFor="name">Name</label> </span> <span><input </span> type<span>="text" </span> name<span>="name" </span> id<span>="name" </span> value<span>={name} </span> onChange<span>={handleNameChange} </span> <span>/> </span> <span></section> </span> <span></form> </span> <span><p>Hello {name}</p> </span> <span></section> </span> <span>); </span><span>} </span>
Le composant du crochet doit rendre et se comporter exactement comme la version du composant de classe:
Si vous comparez la version Hook avec la version du composant de classe, vous vous rendrez compte que la fonctionnalité de crochet réduit votre code de composant d'au moins 30%. Vous pouvez même réduire votre code davantage en exportant les fonctions réutilisables à une bibliothèque NPM.
Ensuite, regardons comment nous pouvons utiliser les crochets d'autres personnes dans notre code.
Regardons un exemple de la façon dont vous pouvez récupérer les données d'une API JSON REST à l'aide d'Axios et React Hooks. Si vous suivez à la maison, vous devrez installer la bibliothèque Axios:
<span>import <span>React, { useState }</span> from "react"; </span> <span>export default function <span>HookDemo</span>(props) { </span> <span>const [name, setName] = useState("Agata"); </span> <span>const [location, setLocation] = useState("Nairobi"); </span> <span>function handleNameChange(e) { </span> <span>setName(e.target.value); </span> <span>} </span> <span>function handleLocationChange(e) { </span> <span>setLocation(e.target.value); </span> <span>} </span> <span>return ( </span> <span><section> </span> <span><form autoComplete="off"> </span> <span><section> </span> <span><label htmlFor="name">Name</label> </span> <span><input </span> type<span>="text" </span> name<span>="name" </span> id<span>="name" </span> value<span>={name} </span> onChange<span>={handleNameChange} </span> <span>/> </span> <span></section> </span> <span><section> </span> <span><label htmlFor="location">Location</label> </span> <span><input </span> type<span>="text" </span> name<span>="location" </span> id<span>="location" </span> value<span>={location} </span> onChange<span>={handleLocationChange} </span> <span>/> </span> <span></section> </span> <span></form> </span> <span><p> </span> <span>Hello {name} from {location} </span> <span></p> </span> <span></section> </span> <span>); </span><span>} </span>
Changez votre composant pour ressembler à ceci:
<span>componentDidMount() { </span> <span>document.title = this.state.name + " from " + this.state.location; </span><span>} </span>
Nous devons nous attendre à la sortie suivante:
Il est possible de refacter le code ci-dessus en construisant votre propre crochet personnalisé de manière à ce que nous n'avons plus besoin d'utiliser UseState et d'utiliser des crochets d'effet. Heureusement pour nous, de nombreux développeurs ont déjà réalisé cette quête et publié leur travail en tant que package que nous pouvons installer dans notre projet. Nous utiliserons Axios-Hooks de Simone Busoli, qui se trouve être le plus populaire.
Vous pouvez installer le package à l'aide de la commande:
npx create-react-app myapp
ci-dessous, j'ai refactorisé le code ci-dessus en utilisant Axios-Hooks:
<span>cd myapp </span><span>npm start </span>
Non seulement nous nous sommes débarrassés des crochets USESTATE et utilisez des crochets de notre code, mais nous avons également acquis trois nouvelles capacités sans aucune puissance supplémentaire de notre part:
La leçon ici est d'éviter de réinventer la roue. Google est votre ami. Dans le monde JavaScript, il y a de fortes chances que quelqu'un ait déjà résolu le problème que vous essayez de résoudre.
Vous trouverez ci-dessous une démo en direct de ce que nous avons accompli jusqu'à présent:
Ce sont les crochets de base que vous rencontrerez dans vos projets de réaction quotidiens:
Nous avons également des crochets de react officiels supplémentaires que vous devrez peut-être utiliser, selon les exigences de votre projet:
Vous pouvez tout lire sur ces crochets dans la documentation officielle de réaction.
La communauté React a répondu positivement à la nouvelle fonctionnalité React Hooks. Il y a déjà un référentiel open source appelé Awesome-React-Hooks, et des centaines de crochets React personnalisés ont été soumis à ce référentiel. Voici un exemple rapide de l'un de ces crochets pour stocker les valeurs dans le stockage local:
npx create-react-app myapp
Vous devrez installer le crochet de stockage local avec le NPM ou le fil comme celui-ci pour l'utiliser:
<span>cd myapp </span><span>npm start </span>
assez soigné, non?
L'introduction de React Hooks a fait un grand éclaboussures. Ses vagues ont dépassé la communauté React dans le monde JavaScript. En effet, les crochets sont un nouveau concept qui peut bénéficier à l'ensemble de l'écosystème JavaScript. En fait, l'équipe Vue.js a récemment publié quelque chose de similaire appelé l'API de composition.
On parle également des crochets React et de l'API de contexte renversant Redux de son trône de gestion de l'État. De toute évidence, les crochets ont rendu le codage beaucoup plus simple et ont changé la façon dont nous rédigerons un nouveau code. Si vous êtes comme moi, vous avez probablement une grande envie de réécrire toutes vos classes de composants React et de les remplacer par des crochets de composants fonctionnels.
Notez que ce n'est pas vraiment nécessaire: l'équipe React ne prévoit pas de déprécier les composants de la classe React. Vous devez également être conscient que toutes les méthodes de cycle de vie des classes réagissent ne sont pas encore possibles avec les crochets. Vous devrez peut-être vous en tenir aux classes de composants React un peu plus longtemps.
Si vous vous sentez suffisamment confiant avec vos nouvelles connaissances sur les crochets de base, je voudrais vous laisser un défi. Refactor cette classe de temporisation à rebours à l'aide de crochets React pour le rendre aussi propre et compact que possible.
codage heureux, et faites-moi savoir comment vous allez!
REACT Les crochets sont des fonctions qui vous permettent de «connecter» les fonctionnalités d'état de réaction et de cycle de vie dans les composants fonctionnels. Ils ont été introduits dans React 16.8 pour permettre à l'état et à d'autres fonctionnalités de réaction sans composants de classe d'écriture.
REACT Les crochets ont été introduits pour simplifier la réutilisation de la logique statuante dans les composants fonctionnels, ce qui facilite la gestion de l'état des composants et des effets secondaires.
Vous pouvez utiliser le crochet UseState pour ajouter l'état aux composants fonctionnels. Il renvoie un tableau avec la valeur d'état actuelle et une fonction pour la mettre à jour.
Le crochet UseEffect vous permet d'effectuer des effets secondaires dans vos composants fonctionnels, tels que la récupération des données, la manipulation DOM, et plus encore, et garantit que ces effets sont gérés correctement.
Oui, vous pouvez utiliser plusieurs instances d'utilisation et utilisent des crochets d'effet dans un seul composant fonctionnel pour gérer différents états et effets.
Le crochet UseContext est utilisé pour accéder au contexte dans les composants fonctionnels. Il vous permet de consommer des valeurs de contexte sans rendre une composante de consommation de contexte.
Le crochet UserReducer est une alternative à UseState pour une gestion d'état plus complexe. Il est utile lorsque vous devez gérer les transitions d'état de manière prévisible.
Vous pouvez créer des crochets personnalisés en définissant des fonctions qui utilisent des crochets intégrés ou d'autres crochets personnalisés. Ces crochets personnalisés peuvent encapsuler et partager la logique avec état entre les composants.
Les règles clés pour l'utilisation de crochets incluent uniquement les utilisation dans des composants fonctionnels, en utilisant des crochets au niveau supérieur (pas à l'intérieur de boucles ou des conditions), et garantir que leur commande dans le composant reste cohérente sur les retendeurs.
Lorsqu'ils sont utilisés correctement, les crochets réagis peuvent améliorer les performances en réduisant les redevateurs inutiles. Cependant, il est essentiel d'utiliser les crochets UseMemo et UseCallback pour optimiser les performances en cas de besoin.
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!