


Apakah komponen berperingkat tinggi React? Bagaimanakah ia mencipta navigasi serbuk roti?
Apakah komponen tertib tinggi React? Mari kita bincangkan tentang cara menggunakan komponen tertib tinggi React untuk membuat navigasi serbuk roti, saya harap ia akan membantu semua orang.
Apakah komponen tertib tinggi React
Balut komponen tertib lebih tinggi React yang perlu diubah suai dalam bentuk fungsi tertib lebih tinggi , dan kembalikan komponen React selepas pemprosesan selesai. Komponen tertib tinggi React digunakan dengan sangat kerap dalam ekosistem React seperti react-router
dalam withRouter
dan react-redux
dalam connect
dilaksanakan dengan cara ini.
Faedah menggunakan komponen tertib tinggi React
Di tempat kerja, kami sering mempunyai banyak keperluan halaman dengan fungsi yang serupa dan kod komponen pendua Biasanya kami boleh menyalin fungsi sepenuhnya dilaksanakan dalam satu pas kod, tetapi kebolehselenggaraan halaman akan menjadi sangat lemah, dan komponen yang sama dalam setiap halaman perlu diubah. Oleh itu, kita boleh mengekstrak bahagian biasa, seperti menerima keputusan operasi pertanyaan yang sama, membalut label yang sama di luar komponen, dsb., membuat fungsi berasingan, dan memasukkan komponen perniagaan yang berbeza sebagai parameter subkomponen, dan fungsi ini Ia tidak akan mengubah suai subkomponen, tetapi membungkus subkomponen dalam komponen bekas melalui gabungan Ia adalah fungsi tulen tanpa kesan sampingan, supaya kita boleh memisahkan bahagian kod ini tanpa mengubah logik komponen ini, dan menambah baik. kod Kebolehkekalan.
Laksanakan komponen tertib tinggi sendiri
Dalam projek hadapan, navigasi serbuk roti dengan pautan sangat biasa digunakan, tetapi kerana navigasi serbuk roti memerlukan penyelenggaraan manual semua direktori Pelbagai pemetaan antara laluan dan nama direktori, dan semua data di sini boleh diperoleh daripada jadual penghalaan react-router
, jadi kita boleh bermula dari sini untuk melaksanakan komponen tertib tinggi navigasi serbuk roti.
Pertama, mari kita lihat data yang disediakan oleh jadual penghalaan kami dan data yang diperlukan oleh komponen serbuk roti sasaran:
// 这里展示的是 react-router4 的route示例 let routes = [ { breadcrumb: '一级目录', path: '/a', component: require('../a/index.js').default, items: [ { breadcrumb: '二级目录', path: '/a/b', component: require('../a/b/index.js').default, items: [ { breadcrumb: '三级目录1', path: '/a/b/c1', component: require('../a/b/c1/index.js').default, exact: true, }, { breadcrumb: '三级目录2', path: '/a/b/c2', component: require('../a/b/c2/index.js').default, exact: true, }, } ] } ] // 理想中的面包屑组件 // 展示格式为 a / b / c1 并都附上链接 const BreadcrumbsComponent = ({ breadcrumbs }) => ( <div> {breadcrumbs.map((breadcrumb, index) => ( <span> <link>{breadcrumb} {index / } </span> ))} </div> );
Di sini kita dapat melihat bahawa komponen serbuk roti perlu menyediakan jumlah data Terdapat tiga jenis, satu ialah laluan halaman semasa, satu ialah teks yang dibawa oleh serbuk roti, dan satu lagi ialah pautan navigasi serbuk roti.
Pertama sekali, kita boleh menggunakan pakej komponen tertib tinggi withRouter yang disediakan oleh penghala tindak balas, yang membolehkan subkomponen mendapatkan atribut lokasi halaman semasa dan dengan itu mendapatkan laluan halaman.
Dua yang terakhir memerlukan kami untuk mengendalikan laluan Pertama, ratakan data yang disediakan oleh laluan ke dalam format yang diperlukan untuk navigasi serbuk roti. Kami boleh menggunakan fungsi untuk melaksanakannya.
/** * 以递归的方式展平react router数组 */ const flattenRoutes = arr => arr.reduce(function(prev, item) { prev.push(item); return prev.concat( Array.isArray(item.items) ? flattenRoutes(item.items) : item ); }, []);
Kemudian letakkan pemetaan laluan direktori yang diratakan dan laluan halaman semasa ke dalam fungsi pemprosesan untuk menjana struktur navigasi serbuk roti.
export const getBreadcrumbs = ({ flattenRoutes, location }) => { // 初始化匹配数组match let matches = []; location.pathname // 取得路径名,然后将路径分割成每一路由部分. .split('?')[0] .split('/') // 对每一部分执行一次调用`getBreadcrumb()`的reduce. .reduce((prev, curSection) => { // 将最后一个路由部分与当前部分合并,比如当路径为 `/x/xx/xxx` 时,pathSection分别检查 `/x` `/x/xx` `/x/xx/xxx` 的匹配,并分别生成面包屑 const pathSection = `${prev}/${curSection}`; const breadcrumb = getBreadcrumb({ flattenRoutes, curSection, pathSection, }); // 将面包屑导入到matches数组中 matches.push(breadcrumb); // 传递给下一次reduce的路径部分 return pathSection; }); return matches; };
Kemudian untuk setiap bahagian laluan serbuk roti, jana nama direktori dan lampirkan atribut pautan yang menghala ke lokasi penghalaan yang sepadan. Selepas
const getBreadcrumb = ({ flattenRoutes, curSection, pathSection }) => { const matchRoute = flattenRoutes.find(ele => { const { breadcrumb, path } = ele; if (!breadcrumb || !path) { throw new Error( 'Router中的每一个route必须包含 `path` 以及 `breadcrumb` 属性' ); } // 查找是否有匹配 // exact 为 react router4 的属性,用于精确匹配路由 return matchPath(pathSection, { path, exact: true }); }); // 返回breadcrumb的值,没有就返回原匹配子路径名 if (matchRoute) { return render({ content: matchRoute.breadcrumb || curSection, path: matchRoute.path, }); } // 对于routes表中不存在的路径 // 根目录默认名称为首页. return render({ content: pathSection === '/' ? '首页' : curSection, path: pathSection, }); };
fungsi pemaparan menjana gaya serbuk roti tunggal terakhir. Satu komponen serbuk roti perlu menyediakan fungsi pemaparan dengan dua prop laluan path
yang ditunjuk oleh serbuk roti dan pemetaan kandungan content
serbuk roti.
/** * */ const render = ({ content, path }) => { const componentProps = { path }; if (typeof content === 'function') { return <content></content>; } return <span>{content}</span>; };
Dengan fungsi ini, kami boleh melaksanakan komponen tertib lebih tinggi React yang boleh melepasi laluan semasa dan sifat penghalaan kepada komponen yang dibalut. Masukkan komponen dan kembalikan struktur komponen yang baharu dan serupa, supaya ia tidak akan merosakkan sebarang fungsi dan operasi di luar komponen.
const BreadcrumbsHoc = ( location = window.location, routes = [] ) => Component => { const BreadComponent = ( <component></component> ); return BreadComponent; }; export default BreadcrumbsHoc;
Kaedah memanggil komponen tertib tinggi ini juga sangat mudah Anda hanya perlu lulus dalam laluan semasa dan atribut react router
yang dihasilkan oleh keseluruhan routes
.
Bagi cara mendapatkan laluan semasa, kita boleh menggunakan fungsi react router
yang disediakan oleh withRouter
Sila rujuk dokumentasi yang berkaitan untuk cara menggunakannya.
Perlu dinyatakan bahawa withRouter
sendiri ialah komponen tertib lebih tinggi yang boleh menyediakan beberapa atribut penghalaan termasuk atribut location
untuk komponen yang dibalut. Oleh itu, API ini juga boleh digunakan sebagai rujukan yang baik untuk mempelajari komponen peringkat tinggi.
withRouter(({ location }) => BreadcrumbsHoc(location, routes)(BreadcrumbsComponent) );
S&J
Jika
react router
yang dihasilkan olehroutes
tidak diselenggara secara manual dengan sendirinya, ia tidak wujud secara tempatan, tetapi ditarik keluar permintaan Apabila ia disimpan dalam redux dan dibalut olehreact-redux
fungsi tertib tinggi yang disediakan olehconnect
, perubahan dalam laluan tidak akan menyebabkan komponen serbuk roti dikemas kini. Penggunaannya adalah seperti berikut:
function mapStateToProps(state) { return { routes: state.routes, }; } connect(mapStateToProps)( withRouter(({ location }) => BreadcrumbsHoc(location, routes)(BreadcrumbsComponent) ) );
Ini sebenarnya adalah connect
pepijat fungsi . Oleh kerana komponen tertib tinggi sambung react-redux akan melaksanakan fungsi cangkuk shouldComponentUpdate untuk komponen parameter masuk, menyebabkan fungsi kitaran hayat berkaitan kemas kini (termasuk render) dicetuskan hanya apabila prop berubah, dan jelas sekali , objek lokasi kami tidak dihantar ke dalam komponen parameter sebagai prop.
untuk membalut withRouter
daripada connect
, iaitu return value
withRouter( connect(mapStateToProps)(({ location, routes }) => BreadcrumbsHoc(location, routes)(BreadcrumbsComponent) ) );
其实我们从这里也可以看出,高阶组件同高阶函数一样,不会对组件的类型造成任何更改,因此高阶组件就如同链式调用一样,可以任意多层包裹来给组件传入不同的属性,在正常情况下也可以随意调换位置,在使用上非常的灵活。这种可插拔特性使得高阶组件非常受React生态的青睐,很多开源库里都能看到这种特性的影子,有空也可以都拿出来分析一下。
Atas ialah kandungan terperinci Apakah komponen berperingkat tinggi React? Bagaimanakah ia mencipta navigasi serbuk roti?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Aplikasi JavaScript di dunia nyata termasuk pengaturcaraan sisi pelayan, pembangunan aplikasi mudah alih dan Internet of Things Control: 1. Pengaturcaraan sisi pelayan direalisasikan melalui node.js, sesuai untuk pemprosesan permintaan serentak yang tinggi. 2. Pembangunan aplikasi mudah alih dijalankan melalui reaktnatif dan menyokong penggunaan silang platform. 3. Digunakan untuk kawalan peranti IoT melalui Perpustakaan Johnny-Five, sesuai untuk interaksi perkakasan.

Saya membina aplikasi SaaS multi-penyewa berfungsi (aplikasi edTech) dengan alat teknologi harian anda dan anda boleh melakukan perkara yang sama. Pertama, apakah aplikasi SaaS multi-penyewa? Aplikasi SaaS Multi-penyewa membolehkan anda melayani beberapa pelanggan dari Sing

Artikel ini menunjukkan integrasi frontend dengan backend yang dijamin oleh permit, membina aplikasi edtech SaaS yang berfungsi menggunakan Next.Js. Frontend mengambil kebenaran pengguna untuk mengawal penglihatan UI dan memastikan permintaan API mematuhi dasar peranan

JavaScript adalah bahasa utama pembangunan web moden dan digunakan secara meluas untuk kepelbagaian dan fleksibiliti. 1) Pembangunan front-end: Membina laman web dinamik dan aplikasi satu halaman melalui operasi DOM dan kerangka moden (seperti React, Vue.js, sudut). 2) Pembangunan sisi pelayan: Node.js menggunakan model I/O yang tidak menyekat untuk mengendalikan aplikasi konkurensi tinggi dan masa nyata. 3) Pembangunan aplikasi mudah alih dan desktop: Pembangunan silang platform direalisasikan melalui reaktnatif dan elektron untuk meningkatkan kecekapan pembangunan.

Trend terkini dalam JavaScript termasuk kebangkitan TypeScript, populariti kerangka dan perpustakaan moden, dan penerapan webassembly. Prospek masa depan meliputi sistem jenis yang lebih berkuasa, pembangunan JavaScript, pengembangan kecerdasan buatan dan pembelajaran mesin, dan potensi pengkomputeran IoT dan kelebihan.

JavaScript adalah asas kepada pembangunan web moden, dan fungsi utamanya termasuk pengaturcaraan yang didorong oleh peristiwa, penjanaan kandungan dinamik dan pengaturcaraan tak segerak. 1) Pengaturcaraan yang didorong oleh peristiwa membolehkan laman web berubah secara dinamik mengikut operasi pengguna. 2) Penjanaan kandungan dinamik membolehkan kandungan halaman diselaraskan mengikut syarat. 3) Pengaturcaraan Asynchronous memastikan bahawa antara muka pengguna tidak disekat. JavaScript digunakan secara meluas dalam interaksi web, aplikasi satu halaman dan pembangunan sisi pelayan, sangat meningkatkan fleksibiliti pengalaman pengguna dan pembangunan silang platform.

Python lebih sesuai untuk sains data dan pembelajaran mesin, manakala JavaScript lebih sesuai untuk pembangunan front-end dan penuh. 1. Python terkenal dengan sintaks ringkas dan ekosistem perpustakaan yang kaya, dan sesuai untuk analisis data dan pembangunan web. 2. JavaScript adalah teras pembangunan front-end. Node.js menyokong pengaturcaraan sisi pelayan dan sesuai untuk pembangunan stack penuh.

JavaScript tidak memerlukan pemasangan kerana ia sudah dibina dalam pelayar moden. Anda hanya memerlukan editor teks dan penyemak imbas untuk memulakan. 1) Dalam persekitaran penyemak imbas, jalankan dengan memasukkan fail HTML melalui tag. 2) Dalam persekitaran Node.js, selepas memuat turun dan memasang node.js, jalankan fail JavaScript melalui baris arahan.


Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

MinGW - GNU Minimalis untuk Windows
Projek ini dalam proses untuk dipindahkan ke osdn.net/projects/mingw, anda boleh terus mengikuti kami di sana. MinGW: Port Windows asli bagi GNU Compiler Collection (GCC), perpustakaan import yang boleh diedarkan secara bebas dan fail pengepala untuk membina aplikasi Windows asli termasuk sambungan kepada masa jalan MSVC untuk menyokong fungsi C99. Semua perisian MinGW boleh dijalankan pada platform Windows 64-bit.

SublimeText3 Linux versi baharu
SublimeText3 Linux versi terkini

DVWA
Damn Vulnerable Web App (DVWA) ialah aplikasi web PHP/MySQL yang sangat terdedah. Matlamat utamanya adalah untuk menjadi bantuan bagi profesional keselamatan untuk menguji kemahiran dan alatan mereka dalam persekitaran undang-undang, untuk membantu pembangun web lebih memahami proses mengamankan aplikasi web, dan untuk membantu guru/pelajar mengajar/belajar dalam persekitaran bilik darjah Aplikasi web keselamatan. Matlamat DVWA adalah untuk mempraktikkan beberapa kelemahan web yang paling biasa melalui antara muka yang mudah dan mudah, dengan pelbagai tahap kesukaran. Sila ambil perhatian bahawa perisian ini

Muat turun versi mac editor Atom
Editor sumber terbuka yang paling popular

Pelayar Peperiksaan Selamat
Pelayar Peperiksaan Selamat ialah persekitaran pelayar selamat untuk mengambil peperiksaan dalam talian dengan selamat. Perisian ini menukar mana-mana komputer menjadi stesen kerja yang selamat. Ia mengawal akses kepada mana-mana utiliti dan menghalang pelajar daripada menggunakan sumber yang tidak dibenarkan.