Jadual Kandungan
2. USEContext: Perkongsian Negeri di seluruh komponen
3. Cangkuk tersuai: menggunakan semula logik, bukan hanya ui
Pemikiran terakhir
Rumah hujung hadapan web Soal Jawab bahagian hadapan Cangkuk React Advanced: UserEducer, useContext, dan cangkuk tersuai

Cangkuk React Advanced: UserEducer, useContext, dan cangkuk tersuai

Oct 04, 2025 am 06:27 AM

UserEducer sangat sesuai untuk logik keadaan kompleks dengan peralihan yang boleh diramal menggunakan tindakan dan fungsi reducer. 2. USEContext menghapuskan penggerudian prop dengan membolehkan akses ke negeri yang dikongsi di mana -mana di dalam pokok komponen apabila dipasangkan dengan pembekal. 3. Cangkuk tersuai seperti USEFetch Encapsulate dan Gunakan Logik di seluruh komponen, mempromosikan kod yang bersih dan dikekalkan. Bersama -sama, cangkuk canggih ini menyediakan pengurusan negeri berskala dan penggunaan semula logik tanpa perpustakaan luaran.

Cangkuk React Advanced: UserEducer, useContext, dan cangkuk tersuai

Apabila anda telah menguasai asas -asas React - useState , useEffect , dan kitaran hayat komponen - sudah tiba masanya. Cangkuk canggih seperti useReducer , useContext , dan cangkuk tersuai membantu anda menguruskan logik keadaan kompleks, berkongsi keadaan di seluruh komponen, dan pastikan kod anda bersih dan boleh diguna semula. Mari kita pecahkan bagaimana dan bila menggunakannya dengan berkesan.

Cangkuk React Advanced: UserEducer, useContext, dan cangkuk tersuai

1. UserEducer: Menguruskan Logik Negeri Kompleks

useState sangat bagus untuk keadaan mudah - kaunter, togol, atau input bentuk. Tetapi apabila logik negara anda menjadi lebih kompleks (sub-nilai sub-, peralihan berdasarkan keadaan terdahulu, atau tindakan yang bergantung kepada keadaan), useReducer bersinar.

Ia mengikuti corak Redux: anda menentukan fungsi reducer yang mengambil keadaan semasa dan tindakan, kemudian mengembalikan keadaan baru.

Cangkuk React Advanced: UserEducer, useContext, dan cangkuk tersuai
 const initialState = {count: 0};

fungsi counterReducer (keadaan, tindakan) {
  suis (action.type) {
    kes 'kenaikan':
      kembali {count: state.count 1};
    kes 'penurunan':
      kembali {count: state.count - 1};
    Kes 'Reset':
      kembali initialstate;
    Lalai:
      membuang ralat baru ();
  }
}

kaunter fungsi () {
  const [State, Dispatch] = userEducer (counterReducer, initialState);

  kembali (
    <dana>
      Kiraan: {state.count}
      <butang onclick = {() => Dispatch ({type: &#39;decrement&#39;})}>-</butang>
      <butang onclick = {() => Dispatch ({type: &#39;increment&#39;})}> </butang>
      <butang onclick = {() => Dispatch ({type: &#39;reset&#39;})}> reset </butang>
    </div>
  );
}

Mengapa menggunakan useReducer ?

  • Memusatkan logik negeri di satu tempat.
  • Menjadikan peralihan keadaan dapat diramal.
  • Hebat untuk bentuk, penyihir, atau mana-mana aliran UI pelbagai langkah.
  • Bekerja dengan baik dengan useContext untuk Negeri Global.

Petua: Anda juga boleh lulus fungsi pemula untuk useReducer untuk permulaan keadaan malas.

Cangkuk React Advanced: UserEducer, useContext, dan cangkuk tersuai

2. USEContext: Perkongsian Negeri di seluruh komponen

Melangkah props ke bawah melalui pelbagai peringkat (penggerudian prop) mendapat cepat kemas. useContext membolehkan anda mengakses keadaan bersama di mana -mana di dalam pokok komponen tanpa meluluskan alat peraga secara manual.

Menggabungkannya dengan useReducer untuk membina sistem negara global yang ringan.

 // Buat konteks
const countContext = react.CreateContext ();

// komponen penyedia
fungsi CountProvider ({Children}) {
  const [state, Dispatch] = userEducer (counterReducer, {count: 0});

  kembali (
    <CountContext.Provider Value = {{State, Dispatch}}>
      {anak}
    </Countcontext.provider>
  );
}

// cangkuk tersuai untuk menggunakan konteks (bersih dan lebih selamat)
fungsi useCount () {
  const context = useContext (countContext);
  jika (! Konteks) membuang ralat baru (&#39;useCount mesti digunakan dalam countprovider&#39;);
  Konteks kembali;
}

// Gunakannya jauh di dalam pokok
fungsi DeepComponent () {
  const {state, Dispatch} = useCount ();

  kembali (
    <dana>
      <p> Count: {state.count} </p>
      <butang onclick = {() => Dispatch ({type: &#39;increment&#39;})}> 1 </butang>
    </div>
  );
}

// bungkus aplikasi anda
aplikasi fungsi () {
  kembali (
    <UNLPROVIDER>
      <DeepComponent />
    </Countprovider>
  );
}

Amalan Terbaik:

  • Sentiasa buat cangkuk tersuai untuk membungkus useContext - ia menghalang kesilapan dan meningkatkan kebolehgunaan semula.
  • Gunakan untuk tema, auth, bahasa, atau mana-mana negeri yang luas.
  • Elakkan terlalu banyak untuk segala -galanya - ia bukan pengganti semua pengurusan negeri.

3. Cangkuk tersuai: menggunakan semula logik, bukan hanya ui

Cangkuk tersuai adalah fungsi yang menggunakan cangkuk lain untuk merangkum dan menggunakan semula logik. Mereka bermula dengan use dan mengikuti peraturan yang sama seperti cangkuk biasa.

Katakan anda mengambil data di beberapa tempat. Daripada mengulangi useState dan useEffect , buat useFetch .

 fungsi useFetch (url) {
  const [data, setData] = useState (null);
  const [loading, setloading] = useState (true);
  const [ralat, setError] = useState (null);

  useeffect (() => {
    const fetchData = async () => {
      Cuba {
        const res = menunggu pengambilan (url);
        const json = menunggu res.json ();
        setData (JSON);
      } menangkap (err) {
        setError (err);
      } akhirnya {
        setloading (palsu);
      }
    };

    fetchData ();
  }, [url]);

  kembali {data, pemuatan, ralat};
}

Sekarang gunakannya di mana sahaja:

 fungsi userProfile ({userId}) {
  const {data, loading, error} = useFetch (`/api/users/$ {userId}`);

  jika (memuatkan) kembali <p> ​​memuatkan ... </p>;
  jika (ralat) return <p> error: {error.message} </p>;

  kembali <div> {data.name} </div>;
}

Lebih banyak idea untuk cangkuk tersuai:

  • useLocalStorage : Sync State dengan localStorage .
  • useForm : Mengendalikan input borang, pengesahan, penyerahan.
  • useOutsideClick : Mengesan klik di luar elemen.
  • useDebounce : Debounce nilai atau panggil balik.

Tingkah laku abstrak cangkuk adat yang baik, bukan hanya menyatakan. Ia harus membuat logik kompleks mudah digunakan.


Pemikiran terakhir

  • useReducer membawa struktur ke kemas kini keadaan kompleks.
  • useContext menghapuskan penggerudian prop dan membolehkan keadaan global (apabila digunakan dengan bijak).
  • Cangkuk tersuai membolehkan anda mengekstrak dan menggunakan semula logik merentasi komponen.

Bersama -sama, mereka memberi kuasa kepada anda untuk menulis aplikasi React yang boleh diselaraskan, tanpa dapat mencapai perpustakaan luaran dengan segera.

Pada asasnya, apabila anda melewati asas-asas, alat-alat ini menjadi penting untuk menguruskan kerumitan dunia nyata-bersih dan cekap.

Atas ialah kandungan terperinci Cangkuk React Advanced: UserEducer, useContext, dan cangkuk tersuai. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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

Alat AI Hot

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Stock Market GPT

Stock Market GPT

Penyelidikan pelaburan dikuasakan AI untuk keputusan yang lebih bijak

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Cara menggayakan tekstasi dengan CSS Cara menggayakan tekstasi dengan CSS Sep 16, 2025 am 07:00 AM

Pertama, tetapkan gaya asas seperti lebar, ketinggian, margin, sempadan, fon dan warna; 2. Meningkatkan maklum balas interaktif melalui: hover dan: fokus keadaan; 3. Gunakan atribut saiz semula untuk mengawal tingkah laku saiz semula; 4. Gunakan :: Pseudo-elemen tempat untuk gaya teks pemegang tempat; 5. Gunakan reka bentuk responsif untuk memastikan ketersediaan silang peranti; 6. Beri perhatian kepada label berkorelasi, kontras warna dan garis besar fokus untuk memastikan kebolehcapaian, dan akhirnya mencapai gaya Textarea yang indah dan berfungsi.

Cara Membuat Bar Kemajuan di Bootstrap Cara Membuat Bar Kemajuan di Bootstrap Sep 20, 2025 am 05:21 AM

Buat bar kemajuan asas menggunakan. Propress Container dan. Progress-bar elemen, dan tetapkan lebar melalui gaya = "Lebar: 50%;" dan tambah atribut Aria untuk meningkatkan kebolehcapaian; 2. Anda boleh menambah teks secara langsung seperti "75%" untuk memaparkan tag kemajuan dalam. Progress-bar; 3. Anda boleh menetapkan warna yang berbeza melalui BG-Success, BG-Warning, BG-Danger dan kelas-kelas lain; 4. Tambah. Progress-bar-striped untuk mencapai kesan jalur, dan menggabungkan. Progress-bar-animasi untuk membuat jalur bergerak secara dinamik; 5. Multiple .Progr

Cara menggunakan tag masa di html Cara menggunakan tag masa di html Sep 19, 2025 am 03:35 AM

ThetagisusedTorepresentdateSandtimesinAmAchine-readableFormatsFormatWhiledisplayingHuman-readableTexTEXt.2.itsupPortSvariousDateTimeFormatSincludingDateSonLy, TimeonLy, DateAndTimithEzone, andPartiAdAdatSViAteAteTiMeatTributeTributeRributeStributeSTimeatTributeSributeSributeSributeSviTaTributeTributeSributeSviTaTributeStributeStRibuteSviTaTratoreStAm.

Cara meredakan video dalam html Cara meredakan video dalam html Sep 17, 2025 am 03:24 AM

Tomuteavideoinhtml, usethemutedbooleanattributeinthetag, yangsilencestheaudiobydefault.2.fordynamiccontrol, usejavascripttosetv ideo.muted = trueorfalse, ortoggleitwithvideo.muted =! video.mutedForinteractiveMute/unmuteFunctionality.3.compinemutedWithAutopla

Apakah perbezaan antara URL mutlak dan relatif dalam HTML? Apakah perbezaan antara URL mutlak dan relatif dalam HTML? Sep 16, 2025 am 07:57 AM

Anabsoluteurlincludesthefullwebaddresswithprotocolanddomain, sementara, dan di mana -mana

Cara mendapatkan nilai maksimum dalam array di JavaScript Cara mendapatkan nilai maksimum dalam array di JavaScript Sep 21, 2025 am 06:02 AM

UseMath.max (... array) forsmalltomediumArrays; 2.usemath.max.apply (null, array) forbettercatibilitywithlargearraysinolderenvironments;

Cara membuat teks responsif dengan CSS Cara membuat teks responsif dengan CSS Sep 15, 2025 am 05:48 AM

TomakeTextresponsiveincss, userelativeUnitslikerem, vw, andclamp () withmediaqueries.1.ReplaceFixedPixelSwithRemforconsistentscali ngbasedOnrootfontsize.2.usevwforfluidscalingButCombinewithCalc () Orclamp () TopreventExtremes.3.applyMediaqueriesatCommonbreakpo

Cara mendapatkan nilai minimum dalam array di JavaScript Cara mendapatkan nilai minimum dalam array di JavaScript Sep 20, 2025 am 05:18 AM

Untuk mendapatkan nilai minimum dalam pelbagai JavaScript, terdapat tiga kaedah yang paling biasa digunakan: 1. Gunakan math.min () dan pengendali lanjutan, yang sesuai untuk susunan berangka kecil dan sederhana, seperti math.min (... nombor); 2. Gunakan math.min.apply (null, nombor), yang merupakan alternatif dalam persekitaran lama; 3. Gunakan array.reduce (), yang sesuai untuk susunan besar atau situasi di mana pemprosesan logik tambahan diperlukan, seperti nombor.reduce ((min, arus) => semasa

See all articles