REACT.JS - JSX, Virtual DOM, lifecycle methods.


 Baik, mari kita lanjutkan dengan pembahasan materi tentang **JSX**, **Virtual DOM**, dan **Lifecycle Methods** di React.

### 1. JSX (JavaScript XML)

**JSX** adalah ekstensi sintaks JavaScript yang memungkinkan kita untuk menulis elemen HTML di dalam JavaScript. JSX terlihat sangat mirip dengan HTML, namun di balik layar, JSX akan ditranspilasi menjadi panggilan `React.createElement()` untuk membangun elemen-elemen DOM.

JSX memudahkan pengembang untuk menulis komponen UI yang lebih ekspresif dan mudah dibaca. Walaupun kita bisa menulis React tanpa JSX, namun JSX lebih disukai karena sintaks yang lebih familiar.

#### Contoh JSX:
```jsx
const element = <h1>Hello, World!</h1>;

JSX mendukung ekspresi JavaScript di dalam kurung kurawal `{}`. Ini memungkinkan kita untuk menampilkan variabel atau hasil dari fungsi JavaScript di dalam UI.

#### Contoh JSX dengan ekspresi:
```jsx
const user = {
  firstName: 'John',
  lastName: 'Doe'
};
const element = <h1>Hello, {user.firstName} {user.lastName}!</h1>;

#### Aturan Penulisan JSX:
- **Satu elemen parent**: JSX harus dibungkus dalam satu elemen induk. Misalnya, jika kita ingin mengembalikan lebih dari satu elemen, kita perlu membungkusnya dalam `<div>` atau menggunakan fragmen (`<> </>`).
- **Penutupan elemen**: Semua elemen dalam JSX harus ditutup. Misalnya, `<img />`, `<input />`.

### 2. Virtual DOM
**Virtual DOM** adalah konsep penting di React yang membuat aplikasi React cepat dan efisien. Pada dasarnya, Virtual DOM adalah representasi ringan dari DOM yang disimpan di memori. Setiap kali state atau props berubah, React memperbarui Virtual DOM terlebih dahulu daripada langsung memodifikasi DOM asli.

#### Bagaimana Virtual DOM bekerja:
1. Ketika ada perubahan pada state atau props, React membangun Virtual DOM baru.
2. React membandingkan (dikenal sebagai "diffing") Virtual DOM baru dengan yang lama untuk menemukan perbedaan.
3. Setelah perbedaan ditemukan, React memperbarui hanya bagian dari DOM asli yang perlu diubah, bukan seluruh halaman.

Keunggulan ini membuat aplikasi React lebih cepat dan lebih efisien dalam menangani perubahan UI, karena manipulasi langsung DOM biasanya memakan banyak sumber daya.

### 3. Lifecycle Methods di React
**Lifecycle methods** adalah metode khusus yang dijalankan pada waktu tertentu dalam siklus hidup suatu komponen React. Ini memungkinkan kita untuk menjalankan kode pada waktu-waktu tertentu, seperti saat komponen di-mount, diperbarui, atau di-unmount.

Lifecycle methods paling sering digunakan pada **class components**, tetapi dengan diperkenalkannya **Hooks**, kita juga bisa mencapai hal yang sama di **functional components**.

#### Lifecycle Methods pada Class Components:
Berikut adalah tahap-tahap utama dari siklus hidup komponen:

1. **Mounting (Ketika Komponen Pertama Kali Di-render)**:
   - `constructor()`: Digunakan untuk inisialisasi state dan binding event handler.
   - `componentDidMount()`: Dipanggil setelah komponen dirender ke DOM. Ini adalah tempat yang baik untuk membuat panggilan API atau manipulasi DOM.
   
2. **Updating (Ketika Komponen Diperbarui)**:
   - `shouldComponentUpdate()`: Mengontrol apakah komponen perlu di-render ulang atau tidak. Digunakan untuk optimasi performa.
   - `componentDidUpdate()`: Dipanggil setelah komponen diperbarui dan di-render ulang.

3. **Unmounting (Ketika Komponen Dihapus dari DOM)**:
   - `componentWillUnmount()`: Dipanggil sebelum komponen dihapus dari DOM. Ini sering digunakan untuk membersihkan resource seperti listeners atau timers.

#### Contoh penggunaan lifecycle methods:
```jsx
class ExampleComponent extends React.Component {
  constructor(props) {
    super(props);
    this.state = { count: 0 };
  }
  componentDidMount() {
    console.log('Komponen telah di-mount');
  }
  componentDidUpdate(prevProps, prevState) {
    if (prevState.count !== this.state.count) {
      console.log('Komponen telah di-update');
    }
  }
  componentWillUnmount() {
    console.log('Komponen akan di-unmount');
  }

  render() {
    return (
      <div>
        <p>Nilai count: {this.state.count}</p>
        <button onClick={() => this.setState({ count: this.state.count + 1 })}>
          Tambah
        </button>
      </div>
    );
  }
}

#### Lifecycle Methods pada Functional Components (Hooks):
Pada functional components, kita menggunakan **Hooks** seperti `useEffect()` untuk menggantikan lifecycle methods.

- **Mounting dan Updating**: Menggunakan `useEffect()` untuk menangani efek samping seperti fetching data atau memanipulasi DOM.
- **Unmounting**: `useEffect()` juga dapat digunakan untuk membersihkan resource ketika komponen di-unmount dengan mengembalikan fungsi pembersih.

#### Contoh penggunaan `useEffect()`:
```jsx
import React, { useState, useEffect } from 'react';

function ExampleComponent() {
  const [count, setCount] = useState(0);

  useEffect(() => {
    console.log('Komponen telah di-mount atau di-update');

    return () => {
      console.log('Komponen akan di-unmount');
    };
  }, [count]); // Efek ini akan dijalankan ketika `count` berubah

  return (
    <div>
      <p>Nilai count: {count}</p>
      <button onClick={() => setCount(count + 1)}>Tambah</button>
    </div>
  );
}
Dalam contoh ini, `useEffect` berfungsi sebagai lifecycle methods pada functional component. Saat komponen dimount atau diperbarui, callback dalam `useEffect` akan dijalankan, dan pembersihan dilakukan sebelum komponen di-unmount.

### Kesimpulan
- **JSX** memungkinkan kita menulis elemen UI menggunakan sintaks yang mirip dengan HTML dalam JavaScript.
- **Virtual DOM** adalah representasi ringan dari DOM yang membuat React cepat dan efisien.
- **Lifecycle Methods** mengontrol siklus hidup komponen React, dan dapat digunakan baik pada class components maupun functional components (dengan Hooks seperti `useEffect`).

Posting Komentar

Lebih baru Lebih lama

Formulir Kontak