Rumah hujung hadapan web tutorial js Cara Mencegah Pemaparan Semula Komponen Reaksi yang Tidak Diperlukan

Cara Mencegah Pemaparan Semula Komponen Reaksi yang Tidak Diperlukan

Sep 10, 2024 am 11:09 AM

How to Prevent Unnecessary React Component Re-Rendering

Memahami cara React Native menghasilkan komponen adalah penting untuk membina aplikasi yang cekap dan berprestasi. Apabila keadaan komponen atau prop berubah, React secara automatik mengemas kini Antara Muka Pengguna(UI) untuk mencerminkan perubahan tersebut. Akibatnya, React memanggil kaedah pemaparan komponen sekali lagi untuk menjana perwakilan UI yang dikemas kini.

Dalam artikel ini, kami akan meneroka tiga React Hooks dan cara ia menghalang rendering yang tidak perlu dalam React

  • useMemo
  • gunakan Panggilan Balik
  • useRef

Alat ini membolehkan kami mengoptimumkan kod kami dengan mengelakkan pemaparan semula yang tidak perlu, meningkatkan prestasi dan menyimpan nilai dengan cekap.

Menjelang akhir artikel ini, kami akan lebih memahami cara menjadikan aplikasi React kami lebih pantas dan lebih responsif menggunakan cangkuk React yang berguna ini.

Menggunakan useMemo React

Dalam React, useMemo boleh menghalang pemaparan semula yang tidak perlu dan mengoptimumkan prestasi.

Mari kita terokai bagaimana cangkuk useMemo boleh menghalang pemaparan semula yang tidak perlu dalam komponen React kami.

Dengan menghafal hasil fungsi dan menjejak kebergantungannya, useMemo memastikan proses itu dikira semula hanya apabila perlu.

Pertimbangkan contoh berikut:

import { useMemo, useState } from 'react';

    function Page() {
      const [count, setCount] = useState(0);
      const [items] = useState(generateItems(300));

      const selectedItem = useMemo(() => items.find((item) => item.id === count), [
        count,
        items,
      ]);

      function generateItems(count) {
        const items = [];
        for (let i = 0; i < count; i++) {
          items.push({
            id: i,
            isSelected: i === count - 1,
          });
        }
        return items;
      }

      return (
        <div className="tutorial">
          <h1>Count: {count}</h1>
          <h1>Selected Item: {selectedItem?.id}</h1>
          <button onClick={() => setCount(count + 1)}>Increment</button>
        </div>
      );
    }

    export default Page;
Salin selepas log masuk

Kod di atas ialah komponen React yang dipanggil Halaman yang menggunakan useMemo untuk mengoptimumkan pengiraan Item yang dipilih.

Ini penjelasannya:

  • Komponen mengekalkan kiraan pembolehubah keadaan menggunakan cangkuk useState.
  • Keadaan item dimulakan menggunakan cangkuk useState dengan hasil fungsi generateItems.
  • Item yang dipilih dikira menggunakan useMemo, yang menghafal hasil operasi item.cari. Ia hanya mengira semula apabila sama ada kiraan atau item berubah.
  • Fungsi generateItems menjana tatasusunan item berdasarkan kiraan yang diberikan.
  • Komponen memaparkan nilai kira semasa, idItem yang dipilih dan butang untuk menambah kiraan.

Menggunakan useMemo mengoptimumkan prestasi dengan menghafal hasil operasi item.cari. Ia memastikan bahawa pengiraan Item terpilih hanya dilakukan apabila kebergantungan (kiraan atau item) berubah, menghalang pengiraan semula yang tidak perlu pada pemaparan berikutnya.

Hafalan harus digunakan secara terpilih untuk operasi intensif pengiraan, kerana ia memperkenalkan overhed tambahan kepada proses pemaparan.

Menggunakan useCallback React

Kait useCallback dalam React membenarkan penghafalan fungsi, menghalangnya daripada dicipta semula semasa setiap pemaparan komponen. Dengan menggunakan useCallback. sesuatu bahagian dibuat sekali sahaja dan digunakan semula dalam pemaparan berikutnya selagi kebergantungannya kekal tidak berubah.

Pertimbangkan contoh berikut:

import React, { useState, useCallback, memo } from 'react';

    const allColors = ['red', 'green', 'blue', 'yellow', 'orange'];

    const shuffle = (array) => {
      const shuffledArray = [...array];
      for (let i = shuffledArray.length - 1; i > 0; i--) {
        const j = Math.floor(Math.random() * (i + 1));
        [shuffledArray[i], shuffledArray[j]] = [shuffledArray[j], shuffledArray[i]];
      }
      return shuffledArray;
    };

    const Filter = memo(({ onChange }) => {
      console.log('Filter rendered!');

      return (
        <input
          type='text'
          placeholder='Filter colors...'
          onChange={(e) => onChange(e.target.value)}
        />
      );
    });

    function Page() {
      const [colors, setColors] = useState(allColors);
      console.log(colors[0])

      const handleFilter = useCallback((text) => {
        const filteredColors = allColors.filter((color) =>
          color.includes(text.toLowerCase())
        );
        setColors(filteredColors);
      }, [colors]);


      return (
        <div className='tutorial'>
        <div className='align-center mb-2 flex'>
          <button onClick={() => setColors(shuffle(allColors))}>
            Shuffle
          </button>
          <Filter onChange={handleFilter} />
        </div>
        <ul>
          {colors.map((color) => (
            <li key={color}>{color}</li>
          ))}
        </ul>
      </div>
      );
    }

    export default Page;
Salin selepas log masuk

Kod di atas menunjukkan fungsi penapisan warna dan kocok yang ringkas dalam komponen React. Jom ikuti langkah demi langkah:

  • Susun atur warna awal ditakrifkan sebagai semuaWarna.
  • Fungsi shuffle mengambil tatasusunan dan mengocok elemennya secara rawak. Ia menggunakan algoritma Fisher-Yates untuk mencapai shuffling.
  • Komponen Penapis ialah komponen fungsian yang dihafal yang menghasilkan elemen input. Ia menerima prop onChange dan mencetuskan fungsi panggil balik apabila nilai input berubah.
  • Komponen Halaman ialah komponen utama yang menjadikan fungsi penapisan dan shuffling warna.
  • Warna pembolehubah keadaan dimulakan menggunakan cangkuk useState, dengan nilai awal ditetapkan kepada semuaWarna. Ia mewakili senarai warna yang ditapis.
  • Fungsi handleFilter dicipta menggunakan cangkuk useCallback. Ia memerlukan parameter teks dan menapis tatasusunan allColors berdasarkan teks yang disediakan. Warna yang ditapis kemudiannya ditetapkan menggunakan fungsi setColors daripada cangkuk useState. Tatasusunan kebergantungan [warna] memastikan bahawa fungsi Penapis pemegang hanya dicipta semula jika keadaan warna berubah, mengoptimumkan prestasi dengan menghalang pemaparan semula yang tidak perlu.
  • Di dalam komponen Halaman terdapat butang untuk merombak warna. Apabila butang diklik, ia memanggil fungsi setColors dengan tatasusunan kocok semuaColors.
  • Komponen Penapis diberikan dengan set onChange prop pada fungsi handleFilter.
  • Akhir sekali, tatasusunan warna dipetakan untuk menjadikan senarai item warna sebagai
  • elemen.

Cakuk useCallback digunakan untuk menghafal fungsi handleFilter, yang bermaksud fungsi itu hanya dicipta sekali dan digunakan semula pada pemaparan berikutnya jika kebergantungan (dalam kes ini, keadaan warna) kekal sama.

This optimization prevents unnecessary re-renders of child components that receive the handleFilter function as a prop, such as the Filter component.
It ensures that the Filter component is not re-rendered if the colors state hasn't changed, improving performance.

Using React's useRef

Another approach to enhance performance in React applications and avoid unnecessary re-renders is using the useRef hook. Using useRef, we can store a mutable value that persists across renders, effectively preventing unnecessary re-renders.

This technique allows us to maintain a reference to a value without triggering component updates when that value changes. By leveraging the mutability of the reference, we can optimize performance in specific scenarios.

Consider the following example:

import React, { useRef, useState } from 'react';

function App() {
  const [name, setName] = useState('');
  const inputRef = useRef(null);

  function handleClick() {
    inputRef.current.focus();
  }

  return (
    <div>
      <input
        type="text"
        value={name}
        onChange={(e) => setName(e.target.value)}
        ref={inputRef}
      />
      <button onClick={handleClick}>Focus</button>
    </div>
  );
}
Salin selepas log masuk

The example above has a simple input field and a button. The useRef hook creates a ref called inputRef. As soon as the button is clicked, the handleClick function is called, which focuses on the input element by accessing the current property of the inputRef ref object. As such, it prevents unnecessary rerendering of the component when the input value changes.

To ensure optimal use of useRef, reserve it solely for mutable values that do not impact the component's rendering. If a mutable value influences the component's rendering, it should be stored within its state instead.

Conclusion

Throughout this tutorial, we explored the concept of React re-rendering and its potential impact on the performance of our applications. We delved into the optimization techniques that can help mitigate unnecessary re-renders. React offers a variety of hooks that enable us to enhance the performance of our applications. We can effectively store values and functions between renders by leveraging these hooks, significantly boosting React application performance.

Atas ialah kandungan terperinci Cara Mencegah Pemaparan Semula Komponen Reaksi yang Tidak Diperlukan. 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
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Nordhold: Sistem Fusion, dijelaskan
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Mandragora: Whispers of the Witch Tree - Cara Membuka Kunci Cangkuk Bergelut
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)

Topik panas

Tutorial Java
1677
14
Tutorial PHP
1280
29
Tutorial C#
1257
24
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.

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: 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.

Peranan C/C dalam JavaScript Jurubah dan Penyusun Peranan C/C dalam JavaScript Jurubah dan Penyusun Apr 20, 2025 am 12:01 AM

C dan C memainkan peranan penting dalam enjin JavaScript, terutamanya digunakan untuk melaksanakan jurubahasa dan penyusun JIT. 1) C digunakan untuk menghuraikan kod sumber JavaScript dan menghasilkan pokok sintaks abstrak. 2) C bertanggungjawab untuk menjana dan melaksanakan bytecode. 3) C melaksanakan pengkompil JIT, mengoptimumkan dan menyusun kod hot-spot semasa runtime, dan dengan ketara meningkatkan kecekapan pelaksanaan JavaScript.

Dari laman web ke aplikasi: Aplikasi pelbagai JavaScript Dari laman web ke aplikasi: Aplikasi pelbagai JavaScript Apr 22, 2025 am 12:02 AM

JavaScript digunakan secara meluas di laman web, aplikasi mudah alih, aplikasi desktop dan pengaturcaraan sisi pelayan. 1) Dalam pembangunan laman web, JavaScript mengendalikan DOM bersama -sama dengan HTML dan CSS untuk mencapai kesan dinamik dan menyokong rangka kerja seperti JQuery dan React. 2) Melalui reaktnatif dan ionik, JavaScript digunakan untuk membangunkan aplikasi mudah alih rentas platform. 3) Rangka kerja elektron membolehkan JavaScript membina aplikasi desktop. 4) Node.js membolehkan JavaScript berjalan di sisi pelayan dan menyokong permintaan serentak yang tinggi.

Python vs JavaScript: Gunakan Kes dan Aplikasi Membandingkan Python vs JavaScript: Gunakan Kes dan Aplikasi Membandingkan Apr 21, 2025 am 12:01 AM

Python lebih sesuai untuk sains data dan automasi, manakala JavaScript lebih sesuai untuk pembangunan front-end dan penuh. 1. Python berfungsi dengan baik dalam sains data dan pembelajaran mesin, menggunakan perpustakaan seperti numpy dan panda untuk pemprosesan data dan pemodelan. 2. Python adalah ringkas dan cekap dalam automasi dan skrip. 3. JavaScript sangat diperlukan dalam pembangunan front-end dan digunakan untuk membina laman web dinamik dan aplikasi satu halaman. 4. JavaScript memainkan peranan dalam pembangunan back-end melalui Node.js dan menyokong pembangunan stack penuh.

See all articles