Beda penggunaan Component Lifecycle antara Class Component dan Function Component (Hooks) di React
Berikut perbandingan penggunaan Component Lifecycle antara Class Component dan Function Component (Hooks) di React, disertai contoh kode dan ilustrasi sederhana agar mudah dipahami.
1. Tabel Perbandingan
Pendefinisian Komponen
Menggunakan class dan extends React.Component
Menggunakan function atau arrow function
Inisialisasi State
this.state = { ... } di constructor
const [state, setState] = useState(...)
Akses Props
this.props
langsung props sebagai parameter
Lifecycle utama
componentDidMount, componentDidUpdate, componentWillUnmount
useEffect(() => {...}, [...])
Cleanup (pembersihan efek)
componentWillUnmount
return di dalam useEffect
Sederhana / Modern
Lebih panjang dan verbose
Lebih ringkas dan mudah dibaca
Kebutuhan ‘this’
Ya, wajib bind this
Tidak ada this
Versi React
Sebelum React 16.8
Setelah React 16.8 ke atas
2. Ilustrasi Sederhana: “Timer Component”
Kita akan buat komponen yang menampilkan waktu dan bertambah setiap detik.
a. Class Component
import React from "react";
class TimerClass extends React.Component {
constructor(props) {
super(props);
this.state = { count: 0 };
}
componentDidMount() {
// Sama seperti useEffect(() => {}, [])
this.interval = setInterval(() => {
this.setState({ count: this.state.count + 1 });
}, 1000);
}
componentWillUnmount() {
// Sama seperti cleanup di useEffect
clearInterval(this.interval);
}
render() {
return <h1>Timer (Class): {this.state.count}</h1>;
}
}
export default TimerClass;Penjelasan lifecycle-nya:
constructor→ inisialisasi state.componentDidMount→ dijalankan setelah komponen muncul di layar (set interval).componentWillUnmount→ dijalankan sebelum komponen dihapus (bersihkan interval).
b. Function Component (Hooks)
import React, { useState, useEffect } from "react";
function TimerFunction() {
const [count, setCount] = useState(0);
useEffect(() => {
// Sama seperti componentDidMount
const interval = setInterval(() => {
setCount((c) => c + 1);
}, 1000);
// Sama seperti componentWillUnmount
return () => clearInterval(interval);
}, []); // [] berarti hanya sekali saat mount
return <h1>Timer (Function): {count}</h1>;
}
export default TimerFunction;Penjelasan lifecycle-nya:
useEffectdengan[]→ dijalankan sekali saat komponen muncul.returndi dalamuseEffect→ cleanup saat komponen dihapus.
3. Ilustrasi Visual (Sederhana)
Class Component: Function Component:
Mount → componentDidMount() Mount → useEffect(() => {...}, [])
Update → componentDidUpdate() Update → useEffect(() => {...}, [deps])
Unmount → componentWillUnmount() Unmount → return () => {...}4. Kesimpulan
Class Component lebih verbose, cocok untuk proyek lama.
Function Component dengan Hooks lebih ringkas, modern, dan direkomendasikan.
Lifecycle lama (
componentDidMount, dll.) sekarang digantikan oleh kombinasiuseEffectdengan dependency array.
Last updated