Heim >Web-Frontend >js-Tutorial >Benutzerdefinierte Hooks in React: Wiederverwendung von Logik über Komponenten hinweg
Ein Custom Hook ist eine JavaScript-Funktion, die es Ihnen ermöglicht, zustandsbehaftete Logik über mehrere Komponenten hinweg in einer React-Anwendung wiederzuverwenden. Benutzerdefinierte Hooks sind ein leistungsstarkes Tool zum Kapseln von Logik, die von Komponenten gemeinsam genutzt werden kann, um die Komponenten sauber zu halten und die Wiederverwendbarkeit von Code zu fördern.
Benutzerdefinierten Hooks wird „use“ vorangestellt, um der Konvention von React zu folgen, und sie können andere darin enthaltene Hooks verwenden (z. B. useState, useEffect, useContext usw.).
Benutzerdefinierte Haken bieten mehrere Vorteile:
Um einen benutzerdefinierten Hook zu erstellen, befolgen Sie diese Schritte:
Hier ist ein einfaches Beispiel für einen benutzerdefinierten Hook, der die Mausposition verwaltet:
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;
Jetzt können Sie diesen benutzerdefinierten Hook in jeder Komponente verwenden, um auf die Mausposition zuzugreifen:
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;
Sie können benutzerdefinierte Hooks für komplexere Logik erstellen, beispielsweise für die Formularverarbeitung.
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;
Jetzt können Sie useFormInput in einer Formularkomponente verwenden:
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;
Benutzerdefinierte Hooks folgen den gleichen Regeln wie React-Hooks:
Benutzerdefinierte Hooks können auch verwendet werden, um Nebenwirkungen wie das Abrufen von Daten zu bewältigen.
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;
So können Sie den useFetchData-Hook in einer Komponente verwenden:
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;
Das obige ist der detaillierte Inhalt vonBenutzerdefinierte Hooks in React: Wiederverwendung von Logik über Komponenten hinweg. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!