Jadual Kandungan
Kerumitan Pengendalian
Akhir sekali
Rumah hujung hadapan web tutorial js [Terjemahan] Refactoring React komponen menggunakan cangkuk tersuai

[Terjemahan] Refactoring React komponen menggunakan cangkuk tersuai

Jan 17, 2023 pm 08:13 PM
javascript hujung hadapan react.js

[Terjemahan] Refactoring React komponen menggunakan cangkuk tersuai

Saya sering mendengar orang bercakap tentang komponen fungsi React, menyebut bahawa komponen fungsi sudah pasti akan menjadi lebih besar dan mempunyai logik yang lebih kompleks. Lagipun, kami menulis komponen dalam "fungsi", jadi anda perlu menerima bahawa komponen akan berkembang dan fungsi akan terus berkembang. Ia juga disebut dalam komponen React:

Memandangkan komponen fungsi boleh melakukan lebih banyak perkara, komponen fungsi dalam pangkalan kod anda secara keseluruhan akan menjadi lebih panjang dan lebih panjang. [Cadangan berkaitan: Tutorial video Redis, Video pengaturcaraan]

Ia juga menyebut bahawa kita harus:

Cuba untuk elakkan Menambah abstraksi lebih awal

Jika anda menggunakan CodeScene, anda mungkin perasan bahawa ia memberi amaran kepada anda apabila fungsi anda terlalu panjang atau kompleks. Jika kami mengikuti apa yang kami katakan sebelum ini, kami mungkin mempertimbangkan sama ada kami harus mengkonfigurasi amaran berkaitan CodeScene secara lebih meluas. Sudah tentu ini boleh dilakukan, tetapi saya fikir kita tidak sepatutnya melakukan ini, dan kita tidak seharusnya menolak untuk menambah banyak abstraksi pada kod Kita boleh mendapat banyak faedah daripadanya, dan kebanyakan masa kosnya tidak tinggi. Kami boleh terus mengekalkan kesihatan kod kami dengan sangat baik!

Kerumitan Pengendalian

Kita harus sedar bahawa walaupun komponen fungsi ditulis dalam "fungsi", fungsi ini masih boleh seperti fungsi lain, Boleh terdiri daripada banyak fungsi lain. Seperti useState, useEffect atau cangkuk lain, subkomponen itu sendiri juga berfungsi. Oleh itu, kita secara semula jadi boleh menggunakan idea yang sama untuk menangani kerumitan komponen fungsi: dengan mencipta fungsi baharu untuk merangkum kod kompleks yang mematuhi corak biasa .

Cara biasa untuk menangani komponen yang kompleks adalah dengan memecahkannya kepada beberapa sub-komponen. Tetapi berbuat demikian mungkin berasa tidak wajar atau menyukarkan untuk menerangkan subkomponen ini dengan tepat. Pada masa ini, kita boleh menemui titik abstrak baharu dengan menyusun logik fungsi cangkuk komponen.

Setiap kali kita melihat senarai panjang useState , useEffect atau fungsi cangkuk terbina dalam lain dalam komponen, kita harus mempertimbangkan sama ada kita boleh mengeluarkannya ke dalam cangkuk tersuai. Fungsi cangkuk tersuai ialah fungsi yang boleh menggunakan fungsi cangkuk lain di dalamnya, dan mencipta fungsi cangkuk tersuai juga mudah.

Komponen yang ditunjukkan di bawah adalah bersamaan dengan papan pemuka, menggunakan senarai untuk memaparkan data gudang pengguna (bayangkan serupa dengan github). Komponen ini bukan komponen yang kompleks, tetapi ia adalah contoh yang baik tentang cara menggunakan cangkuk tersuai.

function Dashboard() {
  const [repos, setRepos] = useState<Repo[]>([]);
  const [isLoadingRepos, setIsLoadingRepos] = useState(true);
  const [repoError, setRepoError] = useState<string | null>(null);

  useEffect(() => {
    fetchRepos()
      .then((p) => setRepos(p))
      .catch((err) => setRepoError(err))
      .finally(() => setIsLoadingRepos(false));
  }, []);

  return (
    <div className="flex gap-2 mb-8">
      {isLoadingRepos && <Spinner />}
      {repoError && <span>{repoError}</span>}
      {repos.map((r) => (
        <RepoCard key={i.name} item={r} />
      ))}
    </div>
  );
}
Salin selepas log masuk

Kami akan mengekstrak logik cangkuk ke dalam cangkuk tersuai, kami hanya perlu menyalin kod ini ke dalam fungsi yang bermula dengan use (di sini kami akan menamakannya useRepos ):

/**
 * 请求所有仓库用户列表的hook函数
 */
export function useRepos() {
  const [repos, setRepos] = useState<Repo[]>([]);
  const [isLoading, setIsLoading] = useState(true);
  const [error, setError] = useState<string | null>(null);

  useEffect(() => {
    fetchRepos()
      .then((p) => setRepos(p))
      .catch((err) => setError(err))
      .finally(() => setIsLoading(false));
  }, []);

  return [repos, isLoading, error] as const;
}
Salin selepas log masuk

mesti bermula dengan use kerana pemalam linter boleh mengesan bahawa apa yang anda sedang buat ialah fungsi cangkuk dan bukannya fungsi biasa, jadi pemalam boleh menyemak sama ada cangkuk anda fungsi mematuhi Peraturan yang berkaitan untuk cangkuk tersuai yang betul.

Berbanding sebelum penapisan, satu-satunya perkara baharu yang muncul selepas penapisan ialah penyataan pulangan dan as const. Pembayang jenis di sini hanyalah untuk memastikan inferens jenis adalah betul: tatasusunan yang mengandungi 3 elemen, jenisnya ialah Repo[], boolean, string | null. Sudah tentu, anda boleh mengembalikan apa sahaja yang anda inginkan daripada fungsi cangkuk.

Nota Penterjemah: Tambah as const di sini Perbezaan dalam inferens jenis ts ditunjukkan terutamanya dalam bilangan elemen angka. Tanpa menambah as const, jenis yang disimpulkan ialah (string | boolean | Repo[] | null)[] dan selepas menambahnya, jenis yang disimpulkan ialah readonly [Repo[], boolean, string | null].

Gunakan cangkuk tersuai useRepos pada komponen kami, dan kod itu menjadi:

function Dashboard() {
  const [repos, isLoadingRepos, repoError] = useRepos();

  return (
    <div className="flex gap-2 mb-8">
      {isLoadingRepos && <Spinner />}
      {repoError && <span>{repoError}</span>}
      {repos.map((i) => (
        <RepoCard key={i.name} item={i} />
      ))}
    </div>
  );
}
Salin selepas log masuk

Seperti yang anda lihat, kami tidak boleh memanggil sebarang Fungsi setter, iaitu , ia tidak boleh mengubah keadaan. Dalam komponen ini, kita tidak perlu lagi memasukkan logik untuk mengubah suai keadaan Logik ini semuanya disertakan dalam fungsi cangkuk useRepos. Sudah tentu jika anda benar-benar memerlukannya, anda boleh mendedahkannya dalam penyataan pulangan fungsi cangkuk.

Apakah faedah melakukan ini? Dokumentasi React menyebut:

Dengan mengekstrak fungsi cangkuk tersuai, logik komponen boleh digunakan semula

Kita boleh bayangkan jika komponen lain dalam aplikasi ini juga perlu memaparkan senarai pengguna di gudang, maka semua komponen ini perlu lakukan ialah mengimport fungsi cangkuk useRepos. Jika cangkuk dikemas kini, mungkin menggunakan beberapa bentuk caching, atau dikemas kini secara berterusan melalui tinjauan pendapat atau pendekatan yang lebih kompleks, maka semua komponen yang merujuk cangkuk ini akan mendapat manfaat.

Sudah tentu, selain memudahkan penggunaan semula, mengekstrak cangkuk tersuai juga mempunyai faedah lain. Dalam contoh kami, semua useState dan useEffect adalah untuk mencapai fungsi yang sama - untuk mendapatkan senarai pengguna perpustakaan Kami menganggap ini sebagai fungsi atom, jadi dalam komponen, terdapat banyak fungsi Atom sedemikian juga sangat biasa. Jika kami mengekstrak kod fungsi atom ini ke dalam fungsi cangkuk tersuai yang berbeza, adalah lebih mudah untuk mencari keadaan yang perlu dikemas kini secara serentak apabila kami mengubah suai logik kod, menjadikannya kurang berkemungkinan terlepas. Selain itu, faedah melakukan ini termasuk:

  • Fungsi yang lebih pendek lebih mudah difahami
  • Keupayaan untuk menamakan fungsi atom (seperti useRepo)
  • Sediakan dokumentasi lebih semula jadi (fungsi setiap fungsi cangkuk tersuai adalah lebih padu dan tunggal, dan fungsi seperti ini juga mudah untuk menulis komen)

Akhir sekali

Kami telah Belajar cangkuk React itu fungsi tidak begitu misteri dan boleh dicipta sama seperti fungsi lain. Kami boleh membuat cangkuk khusus domain kami sendiri dan menggunakannya semula sepanjang aplikasi. Anda juga boleh menemui banyak cangkuk tujuan am pratulis pada pelbagai blog atau "perpustakaan cangkuk". Cangkuk ini boleh digunakan dengan mudah dalam projek kami seperti useState dan useEffect. Cangkuk useInterval Dan Abramov ialah contoh, contohnya anda mempunyai cangkuk yang serupa dengan useRepos tetapi anda perlu boleh membuat tinjauan pendapat untuk mendapatkan kemas kini? Kemudian anda boleh cuba menggunakan useInterval dalam cangkuk anda.

Alamat asal bahasa Inggeris: https://codescene.com/engineering-blog/refactoring-components-in-react-with-custom-hooks

[Pembelajaran yang disyorkan :tutorial video javascript

Atas ialah kandungan terperinci [Terjemahan] Refactoring React komponen menggunakan 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

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.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Arahan sembang dan cara menggunakannya
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

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)

WebSocket dan JavaScript: teknologi utama untuk melaksanakan sistem pemantauan masa nyata WebSocket dan JavaScript: teknologi utama untuk melaksanakan sistem pemantauan masa nyata Dec 17, 2023 pm 05:30 PM

WebSocket dan JavaScript: Teknologi utama untuk merealisasikan sistem pemantauan masa nyata Pengenalan: Dengan perkembangan pesat teknologi Internet, sistem pemantauan masa nyata telah digunakan secara meluas dalam pelbagai bidang. Salah satu teknologi utama untuk mencapai pemantauan masa nyata ialah gabungan WebSocket dan JavaScript. Artikel ini akan memperkenalkan aplikasi WebSocket dan JavaScript dalam sistem pemantauan masa nyata, memberikan contoh kod dan menerangkan prinsip pelaksanaannya secara terperinci. 1. Teknologi WebSocket

PHP dan Vue: gandingan sempurna alat pembangunan bahagian hadapan PHP dan Vue: gandingan sempurna alat pembangunan bahagian hadapan Mar 16, 2024 pm 12:09 PM

PHP dan Vue: gandingan sempurna alat pembangunan bahagian hadapan Dalam era perkembangan pesat Internet hari ini, pembangunan bahagian hadapan telah menjadi semakin penting. Memandangkan pengguna mempunyai keperluan yang lebih tinggi dan lebih tinggi untuk pengalaman tapak web dan aplikasi, pembangun bahagian hadapan perlu menggunakan alat yang lebih cekap dan fleksibel untuk mencipta antara muka yang responsif dan interaktif. Sebagai dua teknologi penting dalam bidang pembangunan bahagian hadapan, PHP dan Vue.js boleh dianggap sebagai alat yang sempurna apabila digandingkan bersama. Artikel ini akan meneroka gabungan PHP dan Vue, serta contoh kod terperinci untuk membantu pembaca memahami dan menggunakan kedua-dua ini dengan lebih baik.

Soalan yang sering ditanya oleh penemuduga front-end Soalan yang sering ditanya oleh penemuduga front-end Mar 19, 2024 pm 02:24 PM

Dalam temu bual pembangunan bahagian hadapan, soalan lazim merangkumi pelbagai topik, termasuk asas HTML/CSS, asas JavaScript, rangka kerja dan perpustakaan, pengalaman projek, algoritma dan struktur data, pengoptimuman prestasi, permintaan merentas domain, kejuruteraan bahagian hadapan, corak reka bentuk, dan teknologi dan trend baharu. Soalan penemuduga direka bentuk untuk menilai kemahiran teknikal calon, pengalaman projek dan pemahaman tentang trend industri. Oleh itu, calon harus bersedia sepenuhnya dalam bidang ini untuk menunjukkan kebolehan dan kepakaran mereka.

JavaScript dan WebSocket: Membina sistem ramalan cuaca masa nyata yang cekap JavaScript dan WebSocket: Membina sistem ramalan cuaca masa nyata yang cekap Dec 17, 2023 pm 05:13 PM

JavaScript dan WebSocket: Membina sistem ramalan cuaca masa nyata yang cekap Pengenalan: Hari ini, ketepatan ramalan cuaca sangat penting kepada kehidupan harian dan membuat keputusan. Apabila teknologi berkembang, kami boleh menyediakan ramalan cuaca yang lebih tepat dan boleh dipercayai dengan mendapatkan data cuaca dalam masa nyata. Dalam artikel ini, kita akan mempelajari cara menggunakan teknologi JavaScript dan WebSocket untuk membina sistem ramalan cuaca masa nyata yang cekap. Artikel ini akan menunjukkan proses pelaksanaan melalui contoh kod tertentu. Kami

Tutorial JavaScript Mudah: Cara Mendapatkan Kod Status HTTP Tutorial JavaScript Mudah: Cara Mendapatkan Kod Status HTTP Jan 05, 2024 pm 06:08 PM

Tutorial JavaScript: Bagaimana untuk mendapatkan kod status HTTP, contoh kod khusus diperlukan: Dalam pembangunan web, interaksi data dengan pelayan sering terlibat. Apabila berkomunikasi dengan pelayan, kami selalunya perlu mendapatkan kod status HTTP yang dikembalikan untuk menentukan sama ada operasi itu berjaya dan melaksanakan pemprosesan yang sepadan berdasarkan kod status yang berbeza. Artikel ini akan mengajar anda cara menggunakan JavaScript untuk mendapatkan kod status HTTP dan menyediakan beberapa contoh kod praktikal. Menggunakan XMLHttpRequest

Adakah Django bahagian hadapan atau belakang? semaklah! Adakah Django bahagian hadapan atau belakang? semaklah! Jan 19, 2024 am 08:37 AM

Django ialah rangka kerja aplikasi web yang ditulis dalam Python yang menekankan pembangunan pesat dan kaedah bersih. Walaupun Django ialah rangka kerja web, untuk menjawab soalan sama ada Django ialah front-end atau back-end, anda perlu mempunyai pemahaman yang mendalam tentang konsep front-end dan back-end. Bahagian hadapan merujuk kepada antara muka yang pengguna berinteraksi secara langsung, dan bahagian belakang merujuk kepada program bahagian pelayan Mereka berinteraksi dengan data melalui protokol HTTP. Apabila bahagian hadapan dan bahagian belakang dipisahkan, program bahagian hadapan dan bahagian belakang boleh dibangunkan secara bebas untuk melaksanakan logik perniagaan dan kesan interaktif masing-masing, dan pertukaran data.

Meneroka teknologi bahagian hadapan bahasa Go: visi baharu untuk pembangunan bahagian hadapan Meneroka teknologi bahagian hadapan bahasa Go: visi baharu untuk pembangunan bahagian hadapan Mar 28, 2024 pm 01:06 PM

Sebagai bahasa pengaturcaraan yang pantas dan cekap, bahasa Go popular secara meluas dalam bidang pembangunan bahagian belakang. Walau bagaimanapun, beberapa orang mengaitkan bahasa Go dengan pembangunan bahagian hadapan. Malah, menggunakan bahasa Go untuk pembangunan bahagian hadapan bukan sahaja boleh meningkatkan kecekapan, tetapi juga membawa ufuk baharu kepada pembangun. Artikel ini akan meneroka kemungkinan menggunakan bahasa Go untuk pembangunan bahagian hadapan dan memberikan contoh kod khusus untuk membantu pembaca memahami dengan lebih baik bahagian ini. Dalam pembangunan front-end tradisional, JavaScript, HTML dan CSS sering digunakan untuk membina antara muka pengguna

Django: Rangka kerja ajaib yang boleh mengendalikan pembangunan bahagian hadapan dan belakang! Django: Rangka kerja ajaib yang boleh mengendalikan pembangunan bahagian hadapan dan belakang! Jan 19, 2024 am 08:52 AM

Django: Rangka kerja ajaib yang boleh mengendalikan pembangunan bahagian hadapan dan belakang! Django ialah rangka kerja aplikasi web yang cekap dan berskala. Ia mampu menyokong berbilang model pembangunan web, termasuk MVC dan MTV, dan boleh membangunkan aplikasi web berkualiti tinggi dengan mudah. Django bukan sahaja menyokong pembangunan bahagian belakang, tetapi juga boleh membina antara muka bahagian hadapan dengan cepat dan mencapai paparan paparan yang fleksibel melalui bahasa templat. Django menggabungkan pembangunan bahagian hadapan dan pembangunan bahagian belakang menjadi penyepaduan yang lancar, supaya pembangun tidak perlu pakar dalam pembelajaran

See all articles