Rumah hujung hadapan web tutorial js Manipulasi DOM yang cekap dengan DOM Maya dan Ruj

Manipulasi DOM yang cekap dengan DOM Maya dan Ruj

Jul 29, 2024 pm 05:10 PM

Efficient DOM Manipulation with the Virtual DOM and Refs
Rahsia Laman Web yang Pantas dan Responsif
Pernah terfikir mengapa tapak web kegemaran anda begitu pantas dan responsif? Semuanya berpunca daripada cara mereka mengendalikan manipulasi DOM. Model Objek Dokumen (DOM) mewakili halaman web anda sebagai pepohon berstruktur. Secara tradisinya, kami menggunakan kaedah JavaScript seperti getElementById atau removeChild untuk membuat perubahan. Tetapi apabila tapak web menjadi lebih kompleks, kaedah ini boleh melambatkan keadaan. Masukkan React, dengan DOM Maya yang mengubah permainannya.

Cabaran dengan Manipulasi DOM Tradisional
Fikirkan DOM sebagai pokok besar dengan banyak cabang. Setiap kali anda ingin menukar sesuatu, seperti mengemas kini item pertama dalam senarai sepuluh, anda akhirnya menggegarkan keseluruhan pokok. Ini boleh memperlahankan keadaan, terutamanya apabila halaman web menjadi lebih kompleks. Semakin banyak cabang (elemen) yang anda miliki, semakin sukar untuk memastikan semuanya berjalan lancar.

Penyelesaian React: DOM Maya
React menangani isu ini dengan DOM Maya, salinan ringan DOM HTML. Perubahan mula-mula digunakan pada DOM Maya, dan kemudian React mengemas kini DOM sebenar dengan cekap untuk mencerminkan perubahan ini. Proses ini, yang dikenali sebagai Rekonsiliasi, memastikan bahawa hanya bahagian DOM yang diperlukan dikemas kini, meningkatkan prestasi dengan ketara.

Cara DOM Maya Berfungsi
Apabila anda memaparkan elemen JSX dalam React, keseluruhan DOM Maya dikemas kini. Walaupun ini mungkin kedengaran tidak cekap, ia lebih pantas daripada memanipulasi DOM sebenar secara langsung. Inilah sebabnya: React mencipta salinan DOM Maya sebelum membuat sebarang kemas kini. Ia kemudian membandingkan DOM Maya yang dikemas kini dengan salinan ini menggunakan proses yang dipanggil Diffing. Perbandingan ini mengenal pasti elemen khusus yang telah berubah dan React hanya mengemas kini elemen tersebut dalam DOM sebenar.

Di Bawah Hud: Algoritma Beza React
Algoritma Beza React ialah sos rahsia di sebalik kemas kini DOM yang cekap. Algoritma ini membandingkan dua versi DOM Maya dan menggunakan set minimum perubahan yang diperlukan untuk menyegerakkannya.
Jika unsur akar dua pokok adalah daripada jenis yang berbeza, React akan membina semula keseluruhan pokok. Contohnya, menukar

kepada wasiat menyebabkan React meruntuhkan dan membina semula pokok itu dari awal.
<div>
  <Tree/>
</div>
<span>
  <Tree/>
</span>
Salin selepas log masuk

Memandangkan unsur akar (div dan span) berbeza, React akan membina semula keseluruhan pokok.

Jenis Elemen Sama

<span id="span1" />
<span id="span2" />
Salin selepas log masuk

Di sini, React hanya akan mengemas kini atribut id, meninggalkan elemen yang lain utuh.

Membandingkan Elemen Kanak-kanak

React juga mengoptimumkan kemas kini kepada elemen kanak-kanak. Pertimbangkan senarai ini:

<ul>
  <li>Child1</li>
  <li>Child2</li>
</ul>
Salin selepas log masuk
<ul>
  <li>Child1</li>
  <li>Child2</li>
  <li>Child3</li>
</ul>
Salin selepas log masuk

React melihat Child3 sebagai baharu dan dikemas kini dengan sewajarnya. Walau bagaimanapun, jika elemen baharu ditambahkan pada permulaan, React mungkin membina semula keseluruhan senarai. Di sinilah kunci masuk.
Peranan Kunci dalam Mengoptimumkan Kemas Kini

Kunci membantu React menjejaki elemen yang telah berubah, ditambah atau dialih keluar. Mereka harus unik dalam kalangan adik beradik dan stabil merentas rendering.

<ul>
  <li key="101">Child1</li>
  <li key="102">Child2</li>
</ul>
Salin selepas log masuk
<ul>
  <li key="100">Child3</li>
  <li key="101">Child1</li>
  <li key="102">Child2</li>
</ul>
Salin selepas log masuk

Dalam contoh ini, React mengetahui Child3 baharu dan mengemas kini senarai dengan cekap tanpa membinanya semula.

Memanipulasi DOM dengan Rujukan
Walaupun React mengoptimumkan kemas kini DOM dengan DOM Mayanya, terdapat senario di mana manipulasi langsung elemen DOM diperlukan, seperti memfokuskan input, menatal ke elemen tertentu atau mengukur dimensi elemen. React menyediakan useRef Hook untuk tujuan ini. Dengan mencipta ref dan melampirkannya pada elemen DOM melalui atribut ref, anda boleh mendapatkan akses terus ke nod DOM. UseRef Hook mengembalikan objek dengan sifat semasa, yang pada mulanya adalah batal tetapi diberikan nod DOM sebaik sahaja ia diberikan. Ini membolehkan anda memanggil kaedah DOM asli secara langsung pada elemen, meningkatkan kawalan ke atas interaksi tertentu. Sebagai contoh, anda boleh menggunakan myRef.current.scrollIntoView() untuk menatal elemen ke paparan.

Contoh: Div Menukar Warna
Mari cipta contoh yang menyeronokkan untuk melihat tindakan ini. Kami akan membuat div yang bertukar warna apabila anda mengklik butang. Kami akan menggunakan komponen berasaskan kelas dan ref untuk memanipulasi secara langsung gaya div.

<div id="root"></div>
Salin selepas log masuk
const root = ReactDOM.createRoot(document.getElementById('root'));

class ColorChanger extends React.Component {
  constructor(props) {
    super(props);
    this.divRef = React.createRef();
    this.colors = ['#FFCDD2', '#C8E6C9', '#BBDEFB', '#FFF9C4', '#D1C4E9'];
    this.state = { colorIndex: 0 };
    this.changeColor = this.changeColor.bind(this);
  }

  changeColor() {
    const nextColorIndex = (this.state.colorIndex + 1) % this.colors.length;
    this.setState({ colorIndex: nextColorIndex });
    this.divRef.current.style.backgroundColor = this.colors[nextColorIndex];
  }

  render() {
    return (
      <div className="container">
        <div
          ref={this.divRef}
          className="color-box"
          style={{
            backgroundColor: this.colors[this.state.colorIndex],
          }}
        ></div>
        <button onClick={this.changeColor}>Change Color</button>
      </div>
    );
  }
}

root.render(<ColorChanger />);
Salin selepas log masuk

Penjelasan

Membuat Root: Akar apl React dibuat menggunakan ReactDOM.createRoot(document.getElementById('root')).
Komponen Penukar Warna:
Pembina: Memulakan ref dengan React.createRef(), menyediakan tatasusunan warna dan memulakan keadaan untuk menjejaki indeks warna.
Kaedah changeColor: Mengira indeks warna seterusnya, mengemas kini keadaan dan menukar warna latar belakang div dengan memanipulasi DOM secara langsung.
Kaedah Render: Memaparkan div dan butang, melampirkan ref pada div dan menetapkan pengendali onClick butang kepada changeColor.
Memaparkan Komponen: Komponen ColorChanger dipaparkan ke dalam elemen akar.
Kesimpulan
DOM Maya React ialah pengubah permainan untuk pembangunan web, menjadikan apl kami lebih cekap dan responsif. Dengan memanfaatkan DOM Maya, React memastikan bahawa hanya bahagian DOM yang diperlukan dikemas kini, meningkatkan prestasi. Memahami cara Algoritma dan kekunci Pembezaan React berfungsi boleh membantu anda mencipta aplikasi React yang lebih lancar dan pantas. Dan apabila anda memerlukan kawalan yang tepat, rujukan React ada untuk membantu anda berinteraksi secara langsung dengan DOM. Hayati kuasa DOM Maya dan tingkatkan kemahiran pembangunan web anda ke peringkat seterusnya!

Atas ialah kandungan terperinci Manipulasi DOM yang cekap dengan DOM Maya dan Ruj. 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

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)
2 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Repo: Cara menghidupkan semula rakan sepasukan
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Cara mendapatkan biji gergasi
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)

Ganti aksara rentetan dalam javascript Ganti aksara rentetan dalam javascript Mar 11, 2025 am 12:07 AM

Ganti aksara rentetan dalam javascript

periksa jQuery jika tarikh sah periksa jQuery jika tarikh sah Mar 01, 2025 am 08:51 AM

periksa jQuery jika tarikh sah

jQuery mendapatkan padding/margin elemen jQuery mendapatkan padding/margin elemen Mar 01, 2025 am 08:53 AM

jQuery mendapatkan padding/margin elemen

10 Tab Accordion JQuery 10 Tab Accordion JQuery Mar 01, 2025 am 01:34 AM

10 Tab Accordion JQuery

10 patut diperiksa plugin jQuery 10 patut diperiksa plugin jQuery Mar 01, 2025 am 01:29 AM

10 patut diperiksa plugin jQuery

HTTP Debugging dengan Node dan HTTP-Console HTTP Debugging dengan Node dan HTTP-Console Mar 01, 2025 am 01:37 AM

HTTP Debugging dengan Node dan HTTP-Console

Tutorial Persediaan API Carian Google Custom Tutorial Persediaan API Carian Google Custom Mar 04, 2025 am 01:06 AM

Tutorial Persediaan API Carian Google Custom

jQuery tambah bar scroll ke div jQuery tambah bar scroll ke div Mar 01, 2025 am 01:30 AM

jQuery tambah bar scroll ke div

See all articles