cari
Rumahalat pembangunancomposerLangkah terperinci untuk merangkum Komposer Konteks React (kongsi)

Artikel ini ditulis oleh komposer ruangan tutorial untuk memperkenalkan kepada anda cara merangkumkan React Context Composer langkah demi langkah. Saya harap ia dapat membantu rakan yang memerlukan.

Bagaimanakah cara saya merangkum Komposer Konteks React langkah demi langkah?

Motivasi

React mempunyai banyak penyelesaian pengurusan negeri, seperti Redux, Mobx, Recoil, dll. Setakat ini, saya hanya mengalami Redux, dan saya fikir ia masih agak menyusahkan. Kerana saya biasanya menulis banyak Cangkuk, saya lebih suka menggunakan Pembekal Konteks dengan cangkuk useContext, yang menjadikannya lebih mudah untuk memisahkan dan menggabungkan keadaan. Di sini, kami tidak akan membincangkan kebaikan dan keburukan setiap penyelesaian pengurusan negeri, tetapi menumpukan pada masalah sarang berbilang lapisan yang dihadapi apabila menggunakan Konteks.

Gambar di bawah ialah beberapa kod yang diekstrak daripada projek taro react hooks ts yang saya tulis baru-baru ini. Saya membahagikan beberapa keadaan global (tujuan pemisahan adalah untuk mengurangkan pemaparan semula yang tidak perlu) dan kemudian menyarangkannya. Cara penulisan ini mengingatkan saya tentang perasaan dikuasai oleh neraka panggil balik, yang sangat tidak selesa. Oleh itu, saya terfikir untuk menyegel komponen pesanan tinggi sendiri dan "meratakan" struktur dari segi penulisan.

<LoadingContext.Provider value={{ loading, setLoading }}>
  <UserDataContext.Provider value={{ name: "ascodelife", age: 25 }}>
    <ThemeContext.Provider value={"light"}>
    {/* ....more Providers as long as you want */}
    </ThemeContext.Provider>
  </UserDataContext.Provider>
</LoadingContext.Provider>

Penyelesaian paling mudah

Di sini, saya dengan pantas menulis penyelesaian pertama, menggunakan reduceRight untuk melengkapkan sarang Penyedia.

Sebab reduceRight digunakan di sini dan bukannya reduce adalah kerana kita lebih terbiasa dengan susunan tulisan dari lapisan luar hingga lapisan dalam.

// ContextComposer.tsx
import React from &#39;react&#39;;
type IContextComposerProps = {
  contexts: { context: React.Context<any>; value: any }[];
};
const ContextComposer: React.FC<IContextComposerProps> = ({ contexts, children }) => {
  return (
    <>
      {contexts.reduceRight((child, parent) => {
        const { context, value } = parent;
        return <context.Provider value={value}>{child}</context.Provider>;
      }, children)}
    </>
  );
};
export default ContextComposer;
// App.tsx
<ContextComposer
  contexts={[
    { context: ThemeContext, value: "light" },
    { context: UserDataContext, value: { name: "ascodelife", age: 25 } },
    { context: LoadingContext, value: { loading, setLoading } },
  ]}>
    { children }
</ContextComposer>

Selepas pengalaman sebenar, saya mendapati bahawa walaupun ia boleh digunakan, pengalaman pembangunan sedikit lebih teruk. Masalahnya ialah nilai yang diluluskan apabila komponen memasuki parameter adalah dari jenis mana-mana, yang bermaksud bahawa pemeriksaan jenis statik ts ditinggalkan. Apabila menghantar parameter, memandangkan semakan jenis statik tidak akan dilakukan pada nilai, bukan sahaja tiada sebarang gesaan kod semasa menaip kod, tetapi ia juga boleh menyebabkan beberapa ralat masa jalan yang agak rendah. Ulasan buruk!

Pelan transformasi berdasarkan React.cloneElement()

Untuk mengubah penyelesaian di atas, saya beralih kepada fungsi yang agak tidak popular tetapi mudah digunakan - React. cloneElement(). Tidak banyak perkara yang perlu diberi perhatian tentang fungsi ini Terutamanya lihat pada tiga parameter inputnya Yang pertama ialah elemen induk, yang kedua ialah prop induk, dan yang ketiga ialah parameter yang selebihnya... kanak-kanak, kecuali bagi. parameter pertama Kecuali untuk ini, semua nilai lain adalah pilihan.

Contohnya:

<!-- 调用函数 -->
React.cloneElement(<div/>,{},<span/>);
<!-- 相当于创建了这样一个结构 -->
<div> 
    <span></span>
</div>

Kemudian mari kita mulakan transformasi Bingkai reduceRight kekal tidak berubah.

// ContextComposer.tsx
import React from &#39;react&#39;;
type IContextComposerProps = {
  contexts: React.ReactElement[];
};
const ContextComposer: React.FC<IContextComposerProps> = ({ contexts, children }) => {
  return (
    <>
      {contexts.reduceRight((child, parent) => {
        return React.cloneElement(parent,{},child);
      }, children)}
    </>
  );
};
export default ContextComposer;
// App.tsx
<ContextComposer
  contexts={[
      <ThemeContext.Provider value={"light"} />,
      <UserDataContext.Provider value={{ name: "ascodelife", age: 25 }} />,
      <LoadingContext.Provider value={{ loading, setLoading }} />,
  ]}>
    { children }
</ContextComposer>

Selepas transformasi, apabila kita melepasi parameter, nampaknya kita benar-benar mencipta komponen (sudah tentu, komponen itu sebenarnya dicipta, tetapi komponen itu sendiri tidak diberikan kepada Dom maya. rendering sebenar Apa yang naik ialah salinan klon). Pada masa yang sama, masalah semakan jenis statik nilai yang baru kita fokuskan juga telah diselesaikan.

petua: React.cloneElement(ibu bapa,{},anak) bersamaan dengan React.cloneElement(ibu bapa,{anak:anak}), adakah anda tahu mengapa?

Sumber berkaitan

Kod sumber telah disegerakkan ke github (https://github.com/ascodelife/react-context-provider-composer).

Ia juga telah dibungkus dalam gudang npm (https://www.npmjs.com/package/@ascodelife/react-context-provider-composer).

Atas ialah kandungan terperinci Langkah terperinci untuk merangkum Komposer Konteks React (kongsi). Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan
Artikel ini dikembalikan pada:juejin. Jika ada pelanggaran, sila hubungi admin@php.cn Padam
Komposer: Menyelaraskan Pembangunan Projek PHPKomposer: Menyelaraskan Pembangunan Projek PHPApr 15, 2025 am 12:08 AM

Komposer memudahkan langkah -langkah pembangunan projek PHP termasuk: 1) menambah kebergantungan, seperti menambah "Laravel/rangka kerja": "^8.0" dalam Composer.json; 2) Memuatkan secara automatik, menghasilkan fail autoload.php dengan menentukan ruang nama dan classpath; 3) Mengoptimumkan prestasi, menggunakan ComposerDump-Autoload-O dan ComposerInstall-NO-DEV-Mengoptimumkan-Autoloader Commands. Melalui langkah -langkah ini, pemaju boleh menjadi lebih cekap dan mengelakkan kesilapan yang sama.

Kelayakan Komposer: Apa yang menjadikan seseorang komposer?Kelayakan Komposer: Apa yang menjadikan seseorang komposer?Apr 14, 2025 am 12:13 AM

Unsur -unsur utama menjadi seorang komposer termasuk: 1. Menguasai Teori Muzik, 2.

Jalan untuk menjadi komposer: panduan praktikalJalan untuk menjadi komposer: panduan praktikalApr 13, 2025 am 12:11 AM

Langkah -langkah untuk menjadi komposer termasuk: 1. Menguasai unsur -unsur asas muzik, seperti nota, irama, keharmonian, dan melodi; 2. Pilih alat teknikal yang sesuai, seperti AbletonLive; 3. Memahami proses penyusunan, termasuk pengambilalihan inspirasi, konsepsi, penulisan, pengubahsuaian dan penambahbaikan; 4. Mulailah dengan penciptaan melodi yang mudah dan secara beransur -ansur mencuba teknik kompleks seperti keharmonian; 5. menyelesaikan masalah biasa melalui teknik debugging, seperti pemilihan nota dan susunan irama; 6. Memohon pengoptimuman prestasi dan amalan terbaik, seperti menggunakan templat, kawalan versi, dan kerjasama.

Komposer: Kunci untuk membina aplikasi PHP yang mantapKomposer: Kunci untuk membina aplikasi PHP yang mantapApr 12, 2025 am 12:05 AM

Komposer adalah alat utama untuk membina aplikasi PHP yang mantap kerana ia memudahkan pengurusan pergantungan, meningkatkan kecekapan pembangunan dan kualiti kod. 1) Komposer mentakrifkan kebergantungan projek melalui fail komposer.json dan memuat turun secara automatik dan menguruskan kebergantungan ini. 2) Ia menghasilkan fail komposer.lock untuk memastikan bahawa versi ketergantungan konsisten dan dimuat secara automatik melalui vendor/autoload.php. 3) Contoh penggunaan termasuk penggunaan asas seperti menambah perpustakaan log, serta penggunaan lanjutan seperti kekangan versi dan pengurusan pembolehubah persekitaran. 4) Teknik debugging kesilapan biasa termasuk pengendalian konflik ketergantungan dan masalah rangkaian. 5) Cadangan Pengoptimuman Prestasi termasuk menggunakan fail komposer.lock dan mengoptimumkan pemuatan automatik.

Kepakaran Komposer: Apa yang menjadikan seseorang mahirKepakaran Komposer: Apa yang menjadikan seseorang mahirApr 11, 2025 pm 12:41 PM

Untuk menjadi mahir apabila menggunakan komposer, anda perlu menguasai kemahiran berikut: 1. Berfungsi dalam menggunakan komposer.json dan komposer.lock fail, 2.

Apa yang dilakukan oleh komposer?Apa yang dilakukan oleh komposer?Apr 08, 2025 am 12:19 AM

Komposer adalah alat pengurusan ketergantungan untuk PHP, yang digunakan untuk mengisytiharkan, memuat turun dan mengurus kebergantungan projek. 1) Mengisytiharkan kebergantungan melalui fail composer.json, 2) Pasang kebergantungan menggunakan perintah komposerinstall, 3) menghuraikan pokok pergantungan dan memuat turunnya dari pembungkus, 4) menghasilkan fail autoload.php untuk memudahkan pemuatan automatik, 5) Mengoptimumkan penggunaan termasuk menggunakan composerupdate-prefer-dist dan penyesuaian autoload.

Apakah komposer aplikasi?Apakah komposer aplikasi?Apr 07, 2025 am 12:07 AM

AppComposer adalah alat untuk membina dan menguruskan aplikasi. 1) Ia memudahkan pembangunan aplikasi dan meningkatkan kecekapan dengan menyeret dan mengkonfigurasi komponen yang telah ditetapkan. 2) Pemaju boleh menentukan komponen, menggabungkan antara muka, menentukan logik perniagaan, dan akhirnya menjadikan permohonan itu. 3) Menyokong penggunaan asas dan maju, seperti pengurusan tugas dan rendering bersyarat, membantu membina aplikasi yang fleksibel.

Untuk apa komposer digunakan?Untuk apa komposer digunakan?Apr 06, 2025 am 12:02 AM

Komposer adalah alat pengurusan ketergantungan untuk PHP. Langkah-langkah teras menggunakan komposer termasuk: 1) mengisytiharkan kebergantungan dalam komposer.json, seperti "jalur/jalur-php": "^7.0"; 2) Jalankan ComposerInstall untuk memuat turun dan mengkonfigurasi kebergantungan; 3) Menguruskan versi dan autoload melalui komposer.lock dan autoload.php. Komposer memudahkan pengurusan pergantungan dan meningkatkan kecekapan projek dan penyelenggaraan.

See all articles

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 laluBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
4 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
4 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Arahan sembang dan cara menggunakannya
4 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌

Alat panas

Muat turun versi mac editor Atom

Muat turun versi mac editor Atom

Editor sumber terbuka yang paling popular

SublimeText3 Linux versi baharu

SublimeText3 Linux versi baharu

SublimeText3 Linux versi terkini

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

mPDF

mPDF

mPDF ialah perpustakaan PHP yang boleh menjana fail PDF daripada HTML yang dikodkan UTF-8. Pengarang asal, Ian Back, menulis mPDF untuk mengeluarkan fail PDF "dengan cepat" dari tapak webnya dan mengendalikan bahasa yang berbeza. Ia lebih perlahan dan menghasilkan fail yang lebih besar apabila menggunakan fon Unicode daripada skrip asal seperti HTML2FPDF, tetapi menyokong gaya CSS dsb. dan mempunyai banyak peningkatan. Menyokong hampir semua bahasa, termasuk RTL (Arab dan Ibrani) dan CJK (Cina, Jepun dan Korea). Menyokong elemen peringkat blok bersarang (seperti P, DIV),

Penyesuai Pelayan SAP NetWeaver untuk Eclipse

Penyesuai Pelayan SAP NetWeaver untuk Eclipse

Integrasikan Eclipse dengan pelayan aplikasi SAP NetWeaver.