Rumah hujung hadapan web tutorial js Memahami React's useMemo: Apa Ia Berfungsi, Bila Untuk Menggunakannya dan Amalan Terbaik

Memahami React's useMemo: Apa Ia Berfungsi, Bila Untuk Menggunakannya dan Amalan Terbaik

Sep 03, 2024 pm 01:14 PM

Understanding React

React ialah perpustakaan yang berkuasa untuk membina antara muka pengguna, tetapi apabila aplikasi anda berkembang, anda mungkin menyedari bahawa prestasi kadangkala boleh menjadi isu. Di sinilah cangkuk React seperti useMemo dimainkan. Dalam artikel ini, kami akan menyelami perkara yang dilakukan useMemo, apabila ia berguna dan amalan terbaik untuk menggunakannya. Kami juga akan membincangkan beberapa perangkap biasa untuk dielakkan.

Apakah useMemo?

useMemo ialah cangkuk React yang membolehkan anda menghafal hasil pengiraan. Secara ringkas, ia mengingati hasil fungsi dan hanya mengiranya semula apabila kebergantungannya berubah. Ini boleh mengelakkan pengiraan yang tidak perlu dan meningkatkan prestasi.

Berikut ialah contoh asas:

import React, { useMemo } from 'react';

function ExpensiveCalculation({ num }) {
  const result = useMemo(() => {
    console.log('Calculating...');
    return num * 2;
  }, [num]);

  return <div>The result is {result}</div>;
}

Salin selepas log masuk

Dalam contoh ini, fungsi di dalam useMemo hanya berjalan apabila num berubah. Jika num kekal sama, React akan melangkau pengiraan dan menggunakan hasil yang telah dihafal sebelum ini.

Mengapa Gunakan useMemo?

Sebab utama untuk menggunakan useMemo adalah untuk mengoptimumkan prestasi. Dalam React, komponen dipaparkan semula apabila keadaan atau prop mereka berubah. Ini boleh menyebabkan pengiraan mahal dijalankan lebih kerap daripada yang diperlukan, terutamanya jika pengiraan rumit atau pokok komponennya besar.

Berikut ialah beberapa senario di mana useMemo amat berguna:

1. Pengiraan Mahal:

Bayangkan anda mempunyai komponen yang melakukan pengiraan yang berat, seperti menapis set data yang besar. Tanpa useMemo, pengiraan ini akan dijalankan pada setiap pemaparan, yang boleh melambatkan aplikasi anda.

import React, { useMemo } from 'react';

function ExpensiveCalculationComponent({ numbers }) {
  // Expensive calculation: filtering even numbers
  const evenNumbers = useMemo(() => {
    console.log('Filtering even numbers...');
    return numbers.filter(num => num % 2 === 0);
  }, [numbers]);

  return (
    <div>
      <h2>Even Numbers</h2>
      <ul>
        {evenNumbers.map((num) => (
          <li key={num}>{num}</li>
        ))}
      </ul>
    </div>
  );
}

// Usage
const numbersArray = Array.from({ length: 100000 }, (_, i) => i + 1);
export default function App() {
  return <ExpensiveCalculationComponent numbers={numbersArray} />;
}
Salin selepas log masuk

Dalam contoh ini, operasi penapisan adalah mahal dari segi pengiraan. Dengan membungkusnya dalam useMemo, ia hanya berjalan apabila tatasusunan nombor berubah, bukannya pada setiap paparan.

2. Mengelakkan Mencipta Semula Objek atau Tatasusunan

Mengirim tatasusunan atau objek baharu sebagai prop kepada komponen anak pada setiap pemaparan boleh menyebabkan pemaparan semula yang tidak perlu, walaupun kandungannya tidak berubah. useMemo boleh digunakan untuk menghafal tatasusunan atau objek.

import React, { useMemo } from 'react';

function ChildComponent({ items }) {
  console.log('Child component re-rendered');
  return (
    <ul>
      {items.map((item, index) => (
        <li key={index}>{item}</li>
      ))}
    </ul>
  );
}

export default function ParentComponent() {
  const items = useMemo(() => ['apple', 'banana', 'cherry'], []);

  return (
    <div>
      <h2>Fruit List</h2>
      <ChildComponent items={items} />
    </div>
  );
}
Salin selepas log masuk

Di sini, tatasusunan item dihafal menggunakan useMemo, memastikan ChildComponent hanya memaparkan semula apabila perlu. Tanpa useMemo, tatasusunan baharu akan dibuat pada setiap pemaparan, menyebabkan pemaparan semula komponen anak yang tidak perlu.

3. Mengoptimumkan Pokok Komponen Besar

Apabila bekerja dengan pokok komponen yang besar, menggunakan useMemo boleh membantu mengurangkan pemaparan semula yang tidak perlu, terutamanya untuk operasi yang mahal dalam komponen bersarang dalam.

import React, { useMemo } from 'react';

function LargeComponentTree({ data }) {
  const processedData = useMemo(() => {
    console.log('Processing data for large component tree...');
    return data.map(item => ({ ...item, processed: true }));
  }, [data]);

  return (
    <div>
      <h2>Processed Data</h2>
      {processedData.map((item, index) => (
        <div key={index}>{item.name}</div>
      ))}
    </div>
  );
}

// Usage
const largeDataSet = Array.from({ length: 1000 }, (_, i) => ({ name: `Item ${i + 1}` }));
export default function App() {
  return <LargeComponentTree data={largeDataSet} />;
}
Salin selepas log masuk

Dalam contoh ini, useMemo digunakan untuk memproses set data yang besar sebelum memaparkannya dalam komponen. Dengan menghafal data yang diproses, komponen hanya mengira semula data apabila prop data asal berubah, mengelakkan pemprosesan semula yang tidak perlu dan meningkatkan prestasi.

Amalan Terbaik untuk menggunakanMemo

Walaupun useMemo ialah alat yang berkuasa, adalah penting untuk menggunakannya dengan betul. Berikut ialah beberapa amalan terbaik:

  1. Gunakannya untuk Pengoptimuman Prestasi: Pengiraan mahal adalah contoh yang baik tentang masa untuk menggunakan useMemo. Ia melakukan operasi yang berpotensi mahal (menjumlahkan tatasusunan dan mendarabkan hasilnya) yang bergantung pada nombor dan pembolehubah keadaan pengganda.
const expensiveCalculation = useMemo(() => {
  console.log('Calculating sum...');
  return numbers.reduce((acc, num) => acc + num, 0) * multiplier;
}, [numbers, multiplier]);
Salin selepas log masuk

Pengiraan ini hanya akan dijalankan semula apabila nombor atau pengganda berubah, berpotensi menjimatkan pengiraan semula yang tidak perlu pada pemaparan semula yang lain.

  1. Pastikan Ketergantungan Tepat: Perhatikan bagaimana cangkuk useMemo untuk pengiraan mahal merangkumi kedua-dua nombor dan pengganda dalam tatasusunan kebergantungannya. Ini memastikan bahawa pengiraan dijalankan semula apabila salah satu daripada nilai ini berubah.
}, [numbers, multiplier]);  // Correct dependencies
Salin selepas log masuk

Jika kami telah meninggalkan pengganda daripada kebergantungan, pengiraan tidak akan dikemas kini apabila pengganda berubah, yang membawa kepada hasil yang salah.

  1. Jangan Terlalu Guna menggunakanMemo: Contoh simpleValue menunjukkan penggunaan useMemo yang tidak perlu:
const simpleValue = useMemo(() => {
  return 42;  // This is not a complex calculation
}, []);  // Empty dependencies array
Salin selepas log masuk

Penghafalan ini tidak diperlukan kerana nilainya tetap dan pengiraan adalah remeh. Ia menambahkan kerumitan tanpa sebarang faedah prestasi.

  1. Fahami Bila Tidak Menggunakannya: Fungsi handleClick ialah contoh yang baik apabila tidak menggunakan useMemo:
const handleClick = () => {
  console.log('Button clicked');
};
Salin selepas log masuk

Fungsi ini mudah dan tidak melibatkan sebarang pengiraan yang berat. Menghafalnya akan menambah kerumitan yang tidak perlu pada kod tanpa memberikan sebarang peningkatan prestasi yang ketara.

Dengan mengikuti amalan terbaik ini, anda boleh menggunakan useMemo dengan berkesan untuk mengoptimumkan komponen React anda tanpa terlalu merumitkan kod anda atau memperkenalkan potensi pepijat daripada pengurusan pergantungan yang salah.

Perangkap Biasa yang Perlu Dielakkan

Walaupun useMemo boleh menjadi alat yang hebat, terdapat beberapa kesilapan biasa yang perlu diperhatikan:

  1. Mengabaikan Ketergantungan: Jika anda terlupa memasukkan kebergantungan dalam tatasusunan, nilai yang dihafal mungkin menjadi basi, yang membawa kepada pepijat. Sentiasa semak semula bahawa semua pembolehubah yang digunakan di dalam fungsi yang dihafal disertakan dalam tatasusunan kebergantungan.

  2. Menggunakan useMemo Everywhere: Tidak semua fungsi atau nilai perlu dihafal. Jika kod anda tidak mempunyai masalah prestasi, menambah useMemo tidak akan memperbaiki keadaan. Malah, ia boleh melambatkan sedikit disebabkan oleh penghafalan yang berlebihan.

  3. Salah Faham Re-Render: useMemo hanya mengoptimumkan pengiraan yang dihafal, bukan keseluruhan proses pemaparan komponen. Jika komponen masih menerima prop atau keadaan baharu, ia akan dipaparkan semula, walaupun nilai yang dihafal tidak berubah.

Kesimpulan

useMemo ialah cangkuk yang berkuasa untuk mengoptimumkan prestasi dalam aplikasi React, tetapi ia harus digunakan dengan bijak. Fokus pada menggunakannya apabila terdapat kesesakan prestasi sebenar, dan sentiasa pastikan bahawa kebergantungan anda adalah betul. Dengan mengikuti amalan terbaik ini, anda boleh mengelakkan perangkap biasa dan memanfaatkan sepenuhnya penggunaanMemo dalam projek anda.

Atas ialah kandungan terperinci Memahami React's useMemo: Apa Ia Berfungsi, Bila Untuk Menggunakannya dan Amalan Terbaik. 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 尊渡假赌尊渡假赌尊渡假赌
Mandragora: Whispers of the Witch Tree - Cara Membuka Kunci Cangkuk Bergelut
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Nordhold: Sistem Fusion, dijelaskan
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
1667
14
Tutorial PHP
1273
29
Tutorial C#
1255
24
Enjin JavaScript: Membandingkan Pelaksanaan Enjin JavaScript: Membandingkan Pelaksanaan Apr 13, 2025 am 12:05 AM

Enjin JavaScript yang berbeza mempunyai kesan yang berbeza apabila menguraikan dan melaksanakan kod JavaScript, kerana prinsip pelaksanaan dan strategi pengoptimuman setiap enjin berbeza. 1. Analisis leksikal: Menukar kod sumber ke dalam unit leksikal. 2. Analisis Tatabahasa: Menjana pokok sintaks abstrak. 3. Pengoptimuman dan Penyusunan: Menjana kod mesin melalui pengkompil JIT. 4. Jalankan: Jalankan kod mesin. Enjin V8 mengoptimumkan melalui kompilasi segera dan kelas tersembunyi, Spidermonkey menggunakan sistem kesimpulan jenis, menghasilkan prestasi prestasi yang berbeza pada kod yang sama.

Python vs JavaScript: Keluk Pembelajaran dan Kemudahan Penggunaan Python vs JavaScript: Keluk Pembelajaran dan Kemudahan Penggunaan Apr 16, 2025 am 12:12 AM

Python lebih sesuai untuk pemula, dengan lengkung pembelajaran yang lancar dan sintaks ringkas; JavaScript sesuai untuk pembangunan front-end, dengan lengkung pembelajaran yang curam dan sintaks yang fleksibel. 1. Sintaks Python adalah intuitif dan sesuai untuk sains data dan pembangunan back-end. 2. JavaScript adalah fleksibel dan digunakan secara meluas dalam pengaturcaraan depan dan pelayan.

Dari C/C ke JavaScript: Bagaimana semuanya berfungsi Dari C/C ke JavaScript: Bagaimana semuanya berfungsi Apr 14, 2025 am 12:05 AM

Peralihan dari C/C ke JavaScript memerlukan menyesuaikan diri dengan menaip dinamik, pengumpulan sampah dan pengaturcaraan asynchronous. 1) C/C adalah bahasa yang ditaip secara statik yang memerlukan pengurusan memori manual, manakala JavaScript ditaip secara dinamik dan pengumpulan sampah diproses secara automatik. 2) C/C perlu dikumpulkan ke dalam kod mesin, manakala JavaScript adalah bahasa yang ditafsirkan. 3) JavaScript memperkenalkan konsep seperti penutupan, rantaian prototaip dan janji, yang meningkatkan keupayaan pengaturcaraan fleksibiliti dan asynchronous.

JavaScript dan Web: Fungsi teras dan kes penggunaan JavaScript dan Web: Fungsi teras dan kes penggunaan Apr 18, 2025 am 12:19 AM

Penggunaan utama JavaScript dalam pembangunan web termasuk interaksi klien, pengesahan bentuk dan komunikasi tak segerak. 1) kemas kini kandungan dinamik dan interaksi pengguna melalui operasi DOM; 2) pengesahan pelanggan dijalankan sebelum pengguna mengemukakan data untuk meningkatkan pengalaman pengguna; 3) Komunikasi yang tidak bersesuaian dengan pelayan dicapai melalui teknologi Ajax.

JavaScript in Action: Contoh dan projek dunia nyata JavaScript in Action: Contoh dan projek dunia nyata Apr 19, 2025 am 12:13 AM

Aplikasi JavaScript di dunia nyata termasuk pembangunan depan dan back-end. 1) Memaparkan aplikasi front-end dengan membina aplikasi senarai TODO, yang melibatkan operasi DOM dan pemprosesan acara. 2) Membina Restfulapi melalui Node.js dan menyatakan untuk menunjukkan aplikasi back-end.

Memahami Enjin JavaScript: Butiran Pelaksanaan Memahami Enjin JavaScript: Butiran Pelaksanaan Apr 17, 2025 am 12:05 AM

Memahami bagaimana enjin JavaScript berfungsi secara dalaman adalah penting kepada pemaju kerana ia membantu menulis kod yang lebih cekap dan memahami kesesakan prestasi dan strategi pengoptimuman. 1) aliran kerja enjin termasuk tiga peringkat: parsing, penyusun dan pelaksanaan; 2) Semasa proses pelaksanaan, enjin akan melakukan pengoptimuman dinamik, seperti cache dalam talian dan kelas tersembunyi; 3) Amalan terbaik termasuk mengelakkan pembolehubah global, mengoptimumkan gelung, menggunakan const dan membiarkan, dan mengelakkan penggunaan penutupan yang berlebihan.

Python vs JavaScript: Komuniti, Perpustakaan, dan Sumber Python vs JavaScript: Komuniti, Perpustakaan, dan Sumber Apr 15, 2025 am 12:16 AM

Python dan JavaScript mempunyai kelebihan dan kekurangan mereka sendiri dari segi komuniti, perpustakaan dan sumber. 1) Komuniti Python mesra dan sesuai untuk pemula, tetapi sumber pembangunan depan tidak kaya dengan JavaScript. 2) Python berkuasa dalam bidang sains data dan perpustakaan pembelajaran mesin, sementara JavaScript lebih baik dalam perpustakaan pembangunan dan kerangka pembangunan depan. 3) Kedua -duanya mempunyai sumber pembelajaran yang kaya, tetapi Python sesuai untuk memulakan dengan dokumen rasmi, sementara JavaScript lebih baik dengan MDNWebDocs. Pilihan harus berdasarkan keperluan projek dan kepentingan peribadi.

Python vs JavaScript: Persekitaran dan Alat Pembangunan Python vs JavaScript: Persekitaran dan Alat Pembangunan Apr 26, 2025 am 12:09 AM

Kedua -dua pilihan Python dan JavaScript dalam persekitaran pembangunan adalah penting. 1) Persekitaran pembangunan Python termasuk Pycharm, Jupyternotebook dan Anaconda, yang sesuai untuk sains data dan prototaip cepat. 2) Persekitaran pembangunan JavaScript termasuk node.js, vscode dan webpack, yang sesuai untuk pembangunan front-end dan back-end. Memilih alat yang betul mengikut keperluan projek dapat meningkatkan kecekapan pembangunan dan kadar kejayaan projek.

See all articles