Jadual Kandungan
Apakah komponen tertib tinggi React
Faedah menggunakan komponen tertib tinggi React
Laksanakan komponen tertib tinggi sendiri
S&J
Rumah hujung hadapan web tutorial js Apakah komponen berperingkat tinggi React? Bagaimanakah ia mencipta navigasi serbuk roti?

Apakah komponen berperingkat tinggi React? Bagaimanakah ia mencipta navigasi serbuk roti?

Oct 19, 2022 pm 07:33 PM
react javascript

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 berperingkat tinggi React? Bagaimanakah ia mencipta navigasi serbuk roti?

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 key={breadcrumb.props.path}>
        <link to={breadcrumb.props.path}>{breadcrumb}</link>
        {index < breadcrumbs.length - 1 && <i> / </i>}
      </span>
    ))}
  </div>
);
Salin selepas log masuk

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

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

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

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 {...componentProps} />;
  }
  return <span {...componentProps}>{content}</span>;
};
Salin selepas log masuk

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
      breadcrumbs={getBreadcrumbs({
        flattenRoutes: flattenRoutes(routes),
        location,
      })}
    />
  );
  return BreadComponent;
};
export default BreadcrumbsHoc;
Salin selepas log masuk

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

S&J

  • Jika react router yang dihasilkan oleh routes tidak diselenggara secara manual dengan sendirinya, ia tidak wujud secara tempatan, tetapi ditarik keluar permintaan Apabila ia disimpan dalam redux dan dibalut oleh react-redux fungsi tertib tinggi yang disediakan oleh connect, 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)
  )
);
Salin selepas log masuk

Ini sebenarnya adalah connectpepijat 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.

Kaedah yang disyorkan secara rasmi ialah menggunakan

untuk membalut withRouter daripada connect, iaitu return value

withRouter(
  connect(mapStateToProps)(({ location, routes }) =>
    BreadcrumbsHoc(location, routes)(BreadcrumbsComponent)
  )
);
Salin selepas log masuk

其实我们从这里也可以看出,高阶组件同高阶函数一样,不会对组件的类型造成任何更改,因此高阶组件就如同链式调用一样,可以任意多层包裹来给组件传入不同的属性,在正常情况下也可以随意调换位置,在使用上非常的灵活。这种可插拔特性使得高阶组件非常受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!

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

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

<🎜>: Bubble Gum Simulator Infinity - Cara Mendapatkan dan Menggunakan Kekunci Diraja
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Nordhold: Sistem Fusion, dijelaskan
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Mandragora: Whispers of the Witch Tree - Cara Membuka Kunci Cangkuk Bergelut
3 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)

Topik panas

Tutorial Java
1665
14
Tutorial PHP
1269
29
Tutorial C#
1249
24
PHP, Vue dan React: Bagaimana untuk memilih rangka kerja bahagian hadapan yang paling sesuai? PHP, Vue dan React: Bagaimana untuk memilih rangka kerja bahagian hadapan yang paling sesuai? Mar 15, 2024 pm 05:48 PM

PHP, Vue dan React: Bagaimana untuk memilih rangka kerja bahagian hadapan yang paling sesuai? Dengan pembangunan berterusan teknologi Internet, rangka kerja bahagian hadapan memainkan peranan penting dalam pembangunan Web. PHP, Vue dan React ialah tiga rangka kerja bahagian hadapan yang mewakili, masing-masing mempunyai ciri dan kelebihan tersendiri. Apabila memilih rangka kerja bahagian hadapan yang hendak digunakan, pembangun perlu membuat keputusan termaklum berdasarkan keperluan projek, kemahiran pasukan dan pilihan peribadi. Artikel ini akan membandingkan ciri dan penggunaan tiga rangka kerja bahagian hadapan PHP, Vue dan React.

Penyepaduan rangka kerja Java dan rangka kerja React bahagian hadapan Penyepaduan rangka kerja Java dan rangka kerja React bahagian hadapan Jun 01, 2024 pm 03:16 PM

Penyepaduan rangka kerja Java dan rangka kerja React: Langkah: Sediakan rangka kerja Java bahagian belakang. Buat struktur projek. Konfigurasikan alat binaan. Buat aplikasi React. Tulis titik akhir REST API. Konfigurasikan mekanisme komunikasi. Kes praktikal (SpringBoot+React): Kod Java: Tentukan pengawal RESTfulAPI. Kod tindak balas: Dapatkan dan paparkan data yang dikembalikan oleh API.

Vue.js vs React: Pertimbangan khusus projek Vue.js vs React: Pertimbangan khusus projek Apr 09, 2025 am 12:01 AM

Vue.js sesuai untuk projek kecil dan sederhana dan lelaran yang cepat, sementara React sesuai untuk aplikasi besar dan kompleks. 1) Vue.js mudah digunakan dan sesuai untuk situasi di mana pasukan tidak mencukupi atau skala projek kecil. 2) React mempunyai ekosistem yang lebih kaya dan sesuai untuk projek dengan prestasi tinggi dan keperluan fungsional yang kompleks.

Peranan React dalam HTML: Meningkatkan Pengalaman Pengguna Peranan React dalam HTML: Meningkatkan Pengalaman Pengguna Apr 09, 2025 am 12:11 AM

React menggabungkan JSX dan HTML untuk meningkatkan pengalaman pengguna. 1) JSX membenamkan HTML untuk menjadikan pembangunan lebih intuitif. 2) Mekanisme DOM maya mengoptimumkan prestasi dan mengurangkan operasi DOM. 3) UI pengurusan berasaskan komponen untuk meningkatkan kebolehkerjaan. 4) Pengurusan negeri dan pemprosesan acara meningkatkan interaktiviti.

React vs Vue: Rangka kerja mana yang digunakan oleh Netflix? React vs Vue: Rangka kerja mana yang digunakan oleh Netflix? Apr 14, 2025 am 12:19 AM

NetflixusesAcustomFrameworkcalled "gibbon" Builtonreact, notreactorsvuedirectly.1) TeamExperience: chectionBasedOnfamiliarity.2) ProjectOplePlexity: VueforsImplerProjects, ReactForComplexones.3)

Ekosistem React: Perpustakaan, Alat, dan Amalan Terbaik Ekosistem React: Perpustakaan, Alat, dan Amalan Terbaik Apr 18, 2025 am 12:23 AM

Ekosistem React termasuk perpustakaan pengurusan negeri (seperti redux), perpustakaan penghalaan (seperti reactrouter), perpustakaan komponen UI (seperti bahan-UI), alat ujian (seperti jest), dan alat bangunan (seperti webpack). Alat ini bekerjasama untuk membantu pemaju membangun dan mengekalkan aplikasi dengan cekap, meningkatkan kualiti kod dan kecekapan pembangunan.

Pembangunan Frontend dengan React: Kelebihan dan Teknik Pembangunan Frontend dengan React: Kelebihan dan Teknik Apr 17, 2025 am 12:25 AM

Kelebihan React adalah fleksibiliti dan kecekapannya, yang dicerminkan dalam: 1) Reka bentuk berasaskan komponen meningkatkan kebolehgunaan semula kod; 2) Teknologi DOM Maya mengoptimumkan prestasi, terutamanya apabila mengendalikan banyak kemas kini data; 3) Ekosistem yang kaya menyediakan sejumlah besar perpustakaan dan alat pihak ketiga. Dengan memahami bagaimana React Works dan menggunakan contoh, anda boleh menguasai konsep terasnya dan amalan terbaik untuk membina antara muka pengguna yang cekap dan boleh dipelihara.

React and the Frontend: Membina Pengalaman Interaktif React and the Frontend: Membina Pengalaman Interaktif Apr 11, 2025 am 12:02 AM

React adalah alat pilihan untuk membina pengalaman front-end interaktif. 1) React memudahkan pembangunan UI melalui komponen dan DOM maya. 2) Komponen dibahagikan kepada komponen fungsi dan komponen kelas. Komponen fungsi adalah lebih mudah dan komponen kelas menyediakan lebih banyak kaedah kitaran hayat. 3) Prinsip kerja React bergantung kepada algoritma DOM dan perdamaian maya untuk meningkatkan prestasi. 4) Pengurusan negeri menggunakan useState atau ini. Kaedah kitaran hayat seperti ComponentDidMount digunakan untuk logik tertentu. 5) Penggunaan asas termasuk membuat komponen dan pengurusan negeri, dan penggunaan lanjutan melibatkan cangkuk tersuai dan pengoptimuman prestasi. 6) Kesalahan biasa termasuk kemas kini status yang tidak betul dan isu prestasi, kemahiran debugging termasuk menggunakan reactdevtools dan sangat baik

See all articles