Rumah > hujung hadapan web > tutorial js > Tingkatkan Kemahiran Reaksi Anda: Memahami dan Menggunakan Cangkuk

Tingkatkan Kemahiran Reaksi Anda: Memahami dan Menggunakan Cangkuk

DDD
Lepaskan: 2024-10-29 12:48:02
asal
990 orang telah melayarinya

Level Up Your React Skills: Understanding and Using Hooks

Cangkuk tindak balas ialah fungsi khas yang membolehkan anda menggunakan ciri React, seperti kaedah keadaan dan kitaran hayat, dalam komponen berfungsi. Mereka telah diperkenalkan dalam React 16.8 untuk memudahkan model komponen dan memudahkan untuk berkongsi logik stateful merentas komponen.

Ciri-ciri Utama React Hooks:

Pengurusan Negeri: Cangkuk seperti useState membolehkan anda menambah dan mengurus keadaan dalam komponen berfungsi tanpa perlu menukarnya kepada komponen kelas.

Kesan Sampingan: Cangkuk useEffect membolehkan anda melakukan kesan sampingan, seperti pengambilan data, langganan atau menukar DOM secara manual, serupa dengan kaedah kitaran hayat dalam komponen kelas.

Kebolehgunaan semula: Cangkuk tersuai membolehkan anda merangkum dan menggunakan semula logik stateful merentas komponen yang berbeza.

Kod Pembersih: Cangkuk membantu mengekalkan komponen o

Cangkuk Terbina dalam

1 useState

  • Penerangan: Membolehkan anda menambah keadaan pada komponen berfungsi.
  • Contoh:
   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>
     );
   };
Salin selepas log masuk
Salin selepas log masuk

2 useEffect

  • Penerangan: Menguruskan kesan sampingan, seperti pengambilan data atau langganan, dalam komponen berfungsi.
  • Contoh:
   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>;
   };
Salin selepas log masuk
Salin selepas log masuk

3 gunakanKonteks

  • Penerangan: Menyediakan akses kepada nilai konteks tanpa memerlukan pengguna.
  • Contoh:
   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>;
   };
Salin selepas log masuk
Salin selepas log masuk

4 useReducer

  • Penerangan: Mengurus logik keadaan kompleks dalam komponen, serupa dengan Redux.
  • Contoh:
   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>
     );
   };

Salin selepas log masuk
Salin selepas log masuk

5 useMemo

  • Penerangan: Menghafal nilai yang dikira untuk mengoptimumkan prestasi, mengelakkan pengiraan semula yang tidak perlu.
  • Contoh:
   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>;
   };
Salin selepas log masuk
Salin selepas log masuk

6 gunakan Panggilan Balik

  • Penerangan: Mengembalikan versi ingatan bagi fungsi panggil balik yang hanya berubah jika salah satu kebergantungan telah berubah.
  • Contoh:
   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>
     );
   };
Salin selepas log masuk
Salin selepas log masuk

7 useRef

  • Penerangan: Mengembalikan objek ref boleh ubah yang berterusan sepanjang hayat komponen sepenuhnya, berguna untuk mengakses elemen DOM secara langsung.
  • Contoh:
   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>
     );
   };
Salin selepas log masuk
Salin selepas log masuk

8 useLayoutEffect

  • Penerangan: Serupa dengan useEffect, tetapi berjalan serentak selepas semua mutasi DOM, membenarkan pengukuran reka letak DOM.
  • Contoh:
   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>;
   };
Salin selepas log masuk
Salin selepas log masuk

9 gunakanImperativeHandle

  • Penerangan: Menyesuaikan nilai tika yang didedahkan apabila menggunakan ref dalam komponen induk.
  • Contoh:
   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>
     );
   };
Salin selepas log masuk
Salin selepas log masuk

10 useDebugValue
- Penerangan: Memaparkan label untuk cangkuk tersuai dalam React DevTools untuk penyahpepijatan yang lebih mudah.
- Contoh:

   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>;
   };
Salin selepas log masuk
Salin selepas log masuk

Cangkuk Tersuai

11 useFetch
- Penerangan: Cangkuk tersuai untuk mengambil data daripada API.
- Contoh:

   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>;
   };
Salin selepas log masuk
Salin selepas log masuk

12 useLocalStorage
- Penerangan: Menyegerakkan keadaan dengan storan setempat untuk mengekalkan data merentas sesi.
- Contoh:

   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>
     );
   };

Salin selepas log masuk
Salin selepas log masuk

13 gunakanSebelumnya
- Penerangan: Mengembalikan nilai keadaan atau prop sebelumnya.
- Contoh:

   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>;
   };
Salin selepas log masuk
Salin selepas log masuk

14 useDebounce
- Perihalan: Menyahlantunkan nilai atau panggilan fungsi, menangguhkan pelaksanaan sehingga selepas kelewatan yang ditentukan.
- Contoh:

   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>
     );
   };
Salin selepas log masuk
Salin selepas log masuk

15 useOnClickOutside
- Penerangan: Mengesan klik di luar elemen tertentu, berguna untuk menutup tetingkap timbul atau lungsur turun.
- Contoh:

   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>
     );
   };
Salin selepas log masuk
Salin selepas log masuk

16 useInterval
- Penerangan: Sediakan selang untuk menjalankan fungsi berulang kali pada selang waktu tertentu.
- Contoh:

   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>;
   };
Salin selepas log masuk
Salin selepas log masuk

17 guna masa habis
- Penerangan: Sediakan tamat masa untuk melaksanakan fungsi selepas kelewatan yang ditentukan.
- Contoh:

   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>
     );
   };
Salin selepas log masuk

18 useMediaQuery
- Penerangan: Menyemak sama ada pertanyaan media sepadan, membenarkan logik reka bentuk responsif.
- Contoh:

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>;
    };

Salin selepas log masuk

19 gunakanScrollPosition
- Penerangan: Menjejaki kedudukan skrol semasa tetingkap.
- Contoh:

 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 };
    };
Salin selepas log masuk

20 useKeyPress
- Penerangan: Mengesan sama ada kekunci tertentu ditekan.
- Contoh:

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];
    };

Salin selepas log masuk

Ringkasan

Senarai ini kini termasuk penerangan untuk setiap cangkuk, memberikan pemahaman yang lebih jelas tentang tujuan dan kes penggunaannya. Jika anda memerlukan sebarang butiran atau contoh lanjut, sila tanya!

Atas ialah kandungan terperinci Tingkatkan Kemahiran Reaksi Anda: Memahami dan Menggunakan Cangkuk. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:dev.to
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan