Heim >Web-Frontend >js-Tutorial >Verbessern Sie Ihre Reaktionsfähigkeiten: Hooks verstehen und verwenden

Verbessern Sie Ihre Reaktionsfähigkeiten: Hooks verstehen und verwenden

DDD
DDDOriginal
2024-10-29 12:48:02951Durchsuche

Level Up Your React Skills: Understanding and Using Hooks

React-Hooks sind spezielle Funktionen, mit denen Sie React-Funktionen wie Status- und Lebenszyklusmethoden in Funktionskomponenten verwenden können. Sie wurden in React 16.8 eingeführt, um das Komponentenmodell zu vereinfachen und die gemeinsame Nutzung von Zustandslogik zwischen Komponenten zu erleichtern.

Hauptmerkmale von React Hooks:

Zustandsverwaltung: Mit Hooks wie useState können Sie den Zustand in Funktionskomponenten hinzufügen und verwalten, ohne diese in Klassenkomponenten konvertieren zu müssen.

Nebenwirkungen: Mit dem useEffect-Hook können Sie Nebenwirkungen wie Datenabruf, Abonnements oder manuelles Ändern des DOM ausführen, ähnlich wie bei Lebenszyklusmethoden in Klassenkomponenten.

Wiederverwendbarkeit: Mit benutzerdefinierten Hooks können Sie zustandsbehaftete Logik über verschiedene Komponenten hinweg kapseln und wiederverwenden.

Reinigercode: Haken helfen dabei, Komponenten sauber zu halten

Integrierte Haken

1 useState

  • Beschreibung: Ermöglicht das Hinzufügen von Status zu Funktionskomponenten.
  • Beispiel:
   import React, { useState } from 'react';

   const Counter = () => {
     const [count, setCount] = useState(0);
     return (
       <div>
         <p>Count: {count}</p>
         <button onClick={() => setCount(count + 1)}>Increment</button>
       </div>
     );
   };

2 useEffect

  • Beschreibung: Verwaltet Nebenwirkungen wie Datenabruf oder Abonnements in Funktionskomponenten.
  • Beispiel:
   import React, { useEffect, useState } from 'react';

   const DataFetcher = () => {
     const [data, setData] = useState(null);
     useEffect(() => {
       fetch('https://api.example.com/data')
         .then(response => response.json())
         .then(setData);
     }, []);
     return <div>{data ? JSON.stringify(data) : 'Loading...'}</div>;
   };

3 useContext

  • Beschreibung: Bietet Zugriff auf Kontextwerte, ohne dass ein Verbraucher erforderlich ist.
  • Beispiel:
   import React, { useContext } from 'react';

   const ThemeContext = React.createContext('light');

   const ThemedComponent = () => {
     const theme = useContext(ThemeContext);
     return <div className={`theme-${theme}`}>Current theme: {theme}</div>;
   };

4 useReducer

  • Beschreibung: Verwaltet komplexe Zustandslogik in Komponenten, ähnlich wie Redux.
  • Beispiel:
   import React, { useReducer } from 'react';

   const initialState = { count: 0 };
   const reducer = (state, action) => {
     switch (action.type) {
       case 'increment':
         return { count: state.count + 1 };
       case 'decrement':
         return { count: state.count - 1 };
       default:
         return state;
     }
   };

   const Counter = () => {
     const [state, dispatch] = useReducer(reducer, initialState);
     return (
       <div>
         <p>Count: {state.count}</p>
         <button onClick={() => dispatch({ type: 'increment' })}>Increment</button>
         <button onClick={() => dispatch({ type: 'decrement' })}>Decrement</button>
       </div>
     );
   };

5 useMemo

  • Beschreibung: Speichert einen berechneten Wert, um die Leistung zu optimieren und unnötige Neuberechnungen zu vermeiden.
  • Beispiel:
   import React, { useMemo, useState } from 'react';

   const ExpensiveComputation = ({ number }) => {
     const compute = (num) => {
       return num * 1000; // Simulate an expensive computation
     };
     const result = useMemo(() => compute(number), [number]);
     return <div>Computed Result: {result}</div>;
   };

6 useCallback

  • Beschreibung: Gibt eine gespeicherte Version einer Rückruffunktion zurück, die sich nur ändert, wenn sich eine der Abhängigkeiten geändert hat.
  • Beispiel:
   import React, { useCallback, useState } from 'react';

   const Button = React.memo(({ onClick, children }) => {
     console.log('Button rendered');
     return <button onClick={onClick}>{children}</button>;
   });

   const App = () => {
     const [count, setCount] = useState(0);
     const increment = useCallback(() => setCount(c => c + 1), []);
     return (
       <div>
         <p>Count: {count}</p>
         <Button onClick={increment}>Increment</Button>
       </div>
     );
   };

7 useRef

  • Beschreibung: Gibt ein veränderbares Referenzobjekt zurück, das für die gesamte Lebensdauer der Komponente bestehen bleibt und für den direkten Zugriff auf DOM-Elemente nützlich ist.
  • Beispiel:
   import React, { useRef } from 'react';

   const FocusInput = () => {
     const inputRef = useRef(null);
     const focusInput = () => {
       inputRef.current.focus();
     };
     return (
       <div>
         <input ref={inputRef} type="text" />
         <button onClick={focusInput}>Focus Input</button>
       </div>
     );
   };

8 useLayoutEffect

  • Beschreibung: Ähnlich wie useEffect, läuft jedoch synchron nach allen DOM-Mutationen und ermöglicht so die Messung des DOM-Layouts.
  • Beispiel:
   import React, { useLayoutEffect, useRef } from 'react';

   const LayoutEffectExample = () => {
     const divRef = useRef();
     useLayoutEffect(() => {
       console.log('Height:', divRef.current.clientHeight);
     }, []);
     return <div ref={divRef}>This is a div</div>;
   };

9 useImperativeHandle

  • Beschreibung: Passt den Instanzwert an, der verfügbar gemacht wird, wenn ref in übergeordneten Komponenten verwendet wird.
  • Beispiel:
   import React, { useState } from 'react';

   const Counter = () => {
     const [count, setCount] = useState(0);
     return (
       <div>
         <p>Count: {count}</p>
         <button onClick={() => setCount(count + 1)}>Increment</button>
       </div>
     );
   };

10 useDebugValue
- Beschreibung: Zeigt eine Beschriftung für benutzerdefinierte Hooks in React DevTools an, um das Debuggen zu erleichtern.
- Beispiel:

   import React, { useEffect, useState } from 'react';

   const DataFetcher = () => {
     const [data, setData] = useState(null);
     useEffect(() => {
       fetch('https://api.example.com/data')
         .then(response => response.json())
         .then(setData);
     }, []);
     return <div>{data ? JSON.stringify(data) : 'Loading...'}</div>;
   };

Benutzerdefinierte Haken

11 useFetch
- Beschreibung: Ein benutzerdefinierter Hook zum Abrufen von Daten von einer API.
- Beispiel:

   import React, { useContext } from 'react';

   const ThemeContext = React.createContext('light');

   const ThemedComponent = () => {
     const theme = useContext(ThemeContext);
     return <div className={`theme-${theme}`}>Current theme: {theme}</div>;
   };

12 LocalStorage verwenden
- Beschreibung: Synchronisiert den Status mit dem lokalen Speicher, um Daten über Sitzungen hinweg beizubehalten.
- Beispiel:

   import React, { useReducer } from 'react';

   const initialState = { count: 0 };
   const reducer = (state, action) => {
     switch (action.type) {
       case 'increment':
         return { count: state.count + 1 };
       case 'decrement':
         return { count: state.count - 1 };
       default:
         return state;
     }
   };

   const Counter = () => {
     const [state, dispatch] = useReducer(reducer, initialState);
     return (
       <div>
         <p>Count: {state.count}</p>
         <button onClick={() => dispatch({ type: 'increment' })}>Increment</button>
         <button onClick={() => dispatch({ type: 'decrement' })}>Decrement</button>
       </div>
     );
   };

13 usePrevious
- Beschreibung: Gibt den vorherigen Wert eines Zustands oder einer Eigenschaft zurück.
- Beispiel:

   import React, { useMemo, useState } from 'react';

   const ExpensiveComputation = ({ number }) => {
     const compute = (num) => {
       return num * 1000; // Simulate an expensive computation
     };
     const result = useMemo(() => compute(number), [number]);
     return <div>Computed Result: {result}</div>;
   };

14 useDebounce
- Beschreibung: Entprellt einen Wert oder Funktionsaufruf und verzögert die Ausführung bis nach einer angegebenen Verzögerung.
- Beispiel:

   import React, { useCallback, useState } from 'react';

   const Button = React.memo(({ onClick, children }) => {
     console.log('Button rendered');
     return <button onClick={onClick}>{children}</button>;
   });

   const App = () => {
     const [count, setCount] = useState(0);
     const increment = useCallback(() => setCount(c => c + 1), []);
     return (
       <div>
         <p>Count: {count}</p>
         <Button onClick={increment}>Increment</Button>
       </div>
     );
   };

15 useOnClickOutside
- Beschreibung: Erkennt Klicks außerhalb eines bestimmten Elements, nützlich zum Schließen von Popups oder Dropdowns.
- Beispiel:

   import React, { useRef } from 'react';

   const FocusInput = () => {
     const inputRef = useRef(null);
     const focusInput = () => {
       inputRef.current.focus();
     };
     return (
       <div>
         <input ref={inputRef} type="text" />
         <button onClick={focusInput}>Focus Input</button>
       </div>
     );
   };

16 useInterval
- Beschreibung: Richtet ein Intervall ein, um eine Funktion wiederholt in bestimmten Intervallen auszuführen.
- Beispiel:

   import React, { useLayoutEffect, useRef } from 'react';

   const LayoutEffectExample = () => {
     const divRef = useRef();
     useLayoutEffect(() => {
       console.log('Height:', divRef.current.clientHeight);
     }, []);
     return <div ref={divRef}>This is a div</div>;
   };

17 useTimeout
- Beschreibung: Richtet ein Timeout ein, um eine Funktion nach einer angegebenen Verzögerung auszuführen.
- Beispiel:

   import React, { useImperativeHandle, forwardRef, useRef } from 'react';

   const CustomInput = forwardRef((props, ref) => {
     const inputRef = useRef();
     useImperativeHandle(ref, () => ({
       focus: () => {
         inputRef.current.focus();
       }
     }));
     return <input ref={inputRef} type="text" />;
   });

   const Parent = () => {
     const ref = useRef();
     return (
       <div>
         <CustomInput ref={ref} />
         <button onClick={() => ref.current.focus()}>Focus Input</button>
       </div>
     );
   };

18 useMediaQuery
- Beschreibung:Überprüft, ob eine Medienabfrage übereinstimmt, was eine responsive Designlogik ermöglicht.
- Beispiel:

import { useDebugValue } from 'react';

    const useCustomHook = (value) => {
      useDebugValue(value ? 'Value is true' : 'Value is false');
      return value;
    };

    const DebugExample = () => {
      const isTrue = useCustomHook(true);
      return <div>Check the React DevTools</div>;
    };

19 useScrollPosition
- Beschreibung: Verfolgt die aktuelle Bildlaufposition des Fensters.
- Beispiel:

 import { useState, useEffect } from 'react';

    const useFetch = (url) => {
      const [data, setData] = useState(null);
      const [loading, setLoading] = useState(true);

      useEffect(() => {
        const fetchData = async () => {
          const response = await fetch(url);
          const result = await response.json();
          setData(result);
          setLoading(false);
        };
        fetchData();
      }, [url]);

      return { data, loading };
    };

20 useKeyPress
- Beschreibung: Erkennt, ob eine bestimmte Taste gedrückt wird.
- Beispiel:

import { useState, useEffect } from 'react';

    const useLocalStorage = (key, initialValue) => {
      const [storedValue, setStoredValue] = useState(() => {
        try {
          const item = window.localStorage.getItem(key);
          return item ? JSON.parse(item) : initialValue;
        } catch (error) {
          console.error(error);
          return initialValue;
        }
      });

      useEffect(() => {
        try {
          window.localStorage.setItem(key, JSON.stringify(storedValue));
        } catch (error) {
          console.error(error);
        }
      }, [key, storedValue]);

      return [storedValue, setStoredValue];
    };

Zusammenfassung

Diese Liste enthält jetzt Beschreibungen für jeden Hook, um ein klareres Verständnis ihrer Zwecke und Anwendungsfälle zu vermitteln. Wenn Sie weitere Details oder Beispiele benötigen, fragen Sie einfach nach!

Das obige ist der detaillierte Inhalt vonVerbessern Sie Ihre Reaktionsfähigkeiten: Hooks verstehen und verwenden. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn