Maison >interface Web >js tutoriel >Hooks personnalisés dans React : réutilisation de la logique entre les composants
Un Custom Hook est une fonction JavaScript qui vous permet de réutiliser la logique avec état sur plusieurs composants dans une application React. Les hooks personnalisés sont un outil puissant pour encapsuler la logique qui peut être partagée entre les composants, en gardant les composants propres et en favorisant la réutilisabilité du code.
Les hooks personnalisés sont préfixés par use, pour suivre la convention de React, et peuvent utiliser d'autres hooks à l'intérieur (tels que useState, useEffect, useContext, etc.).
Les crochets personnalisés offrent plusieurs avantages :
Pour créer un hook personnalisé, suivez ces étapes :
Voici un exemple simple de hook personnalisé qui gère la position de la souris :
import { useState, useEffect } from 'react'; // Custom Hook to track mouse position const useMousePosition = () => { const [position, setPosition] = useState({ x: 0, y: 0 }); useEffect(() => { const updatePosition = (event) => { setPosition({ x: event.clientX, y: event.clientY }); }; // Add event listener for mouse movement window.addEventListener('mousemove', updatePosition); // Clean up the event listener return () => { window.removeEventListener('mousemove', updatePosition); }; }, []); return position; }; export default useMousePosition;
Maintenant, vous pouvez utiliser ce hook personnalisé dans n'importe quel composant pour accéder à la position de la souris :
import { useState, useEffect } from 'react'; // Custom Hook to track mouse position const useMousePosition = () => { const [position, setPosition] = useState({ x: 0, y: 0 }); useEffect(() => { const updatePosition = (event) => { setPosition({ x: event.clientX, y: event.clientY }); }; // Add event listener for mouse movement window.addEventListener('mousemove', updatePosition); // Clean up the event listener return () => { window.removeEventListener('mousemove', updatePosition); }; }, []); return position; }; export default useMousePosition;
Vous pouvez créer des hooks personnalisés pour une logique plus complexe, comme la gestion des formulaires.
import React from 'react'; import useMousePosition from './useMousePosition'; const MouseTracker = () => { const position = useMousePosition(); // Using the custom hook return ( <div> <h2>Mouse Position:</h2> <p>X: {position.x}, Y: {position.y}</p> </div> ); }; export default MouseTracker;
Maintenant, vous pouvez utiliser useFormInput dans un composant de formulaire :
import { useState } from 'react'; // Custom Hook to handle form input const useFormInput = (initialValue) => { const [value, setValue] = useState(initialValue); const handleChange = (event) => { setValue(event.target.value); }; return { value, onChange: handleChange, }; }; export default useFormInput;
Les hooks personnalisés suivent les mêmes règles que les hooks React :
Les hooks personnalisés peuvent également être utilisés pour gérer les effets secondaires, comme la récupération de données.
import React from 'react'; import useFormInput from './useFormInput'; const MyForm = () => { const nameInput = useFormInput(''); const emailInput = useFormInput(''); const handleSubmit = (event) => { event.preventDefault(); console.log('Name:', nameInput.value); console.log('Email:', emailInput.value); }; return ( <form onSubmit={handleSubmit}> <div> <label>Name:</label> <input type="text" {...nameInput} /> </div> <div> <label>Email:</label> <input type="email" {...emailInput} /> </div> <button type="submit">Submit</button> </form> ); }; export default MyForm;
Voici comment utiliser le hook useFetchData dans un composant :
import { useState, useEffect } from 'react'; // Custom Hook to track mouse position const useMousePosition = () => { const [position, setPosition] = useState({ x: 0, y: 0 }); useEffect(() => { const updatePosition = (event) => { setPosition({ x: event.clientX, y: event.clientY }); }; // Add event listener for mouse movement window.addEventListener('mousemove', updatePosition); // Clean up the event listener return () => { window.removeEventListener('mousemove', updatePosition); }; }, []); return position; }; export default useMousePosition;
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!