Berbicara tentang React, hal pertama yang menjadikan library ini sangat disukai adalah kemampuan melakukan update sebuah tampilan dan data secara otomatis jika terdapat perubahan. Kemampuan tersebut di dalam React disebut dengan lifecycle atau kalau diterjemahkan adalah siklus hidup.
React Lifecycle - Class Component
Pertama. kita akan membahas tentang lifecycle atau siklus hidup yang ada di dalam React. Sama seperti kita (manusia), di React ada 3 fase siklus hidup. Yaitu :
- dimana kita dilahirkan (mounting)
- kemudian berkembang (updating)
- dan kematian (unmounting).

Mounting
Fase ini mengacu pada pembuatan komponen. Di sinilah komponen ditambahkan ke DOM. Berikut ini adalah beberapa lifecycle yang tersedia untuk fase ini:
1. constructor()
Sebelum memulai fase mounting, kita mungkin perlu menginisialisasi komponen menggunakan method constructor(). Ini digunakan ketika kita perlu menginisialisasi sebuah state dan set method ke dalam komponen. Ini adalah satu-satunya tempat di mana this.state ditetapkan secara eksplisit.
2. static getDerivedStateFromProps()
Setelah inisialisasi, fungsi berikutnya yang dipanggil adalah static getDerivedStateFromProps(). Method ini dipanggil sebelum komponen di render (dan sebelum dipasang).
Method ini memungkinkan komponen untuk memperbarui state berdasarkan perubahan pada props. Ini jarang digunakan dan harus digunakan dengan hati-hati karena dapat menyebabkan kesalahan. Aturan umum sebagai pemula, mungkin kita tidak membutuhkannya dan harus menghindari menggunakannya.
3. render()
Method render() adalah satu-satunya method yang harus dimiliki komponen. Itu akan selalu dipanggil dan tugasnya adalah memasang komponen ke DOM.
4. componentDidMount()
Fungsi terakhir dalam fase ini adalah componentDidMount(). Method ini akan segera dipanggil setelah fungsi render dijalankan. Jika kita perlu berinteraksi dengan browser secara langsung, di sinilah kita melakukannya.
Disini kita bisa melakukan HTTP request ke Rest API dan memperbarui state pada component berdasarkan response yang di dapatkan dari Rest API.
Updating
Fase kedua ini mewakili waktu di mana komponen perlu diperbarui karena terjadi perubahan pada props atau state. Perubahan ini dapat terjadi di dalam komponen atau melalui backend. Perubahan ini akan memanggil fungsi render() lagi.
Berikut ini adalah beberapa lifecycle yang tersedia untuk fase ini:
1. static getDeprivedStateFromProps()
Ini adalah method pertama yang dipanggil dalam fase ini. Method ini adalah method yang sama yang digunakan dalam fase mounting.
2. shouldComponentUpdate()
Method selanjutnya yang akan dipanggil adalah method shouldComponentUpdate(). Seperti namanya, method ini memberi kita kendali atas apakah suatu komponen harus diperbarui atau tidak karena perubahan pada properti atau state-nya. Secara default, komponen akan selalu dirender ulang saat diperbarui. Method ini dapat mengembalikan nilai true atau false.
3. render()
Jika shouldComponentUpdate() mengembalikan nilai true, maka fungsi render akan dipanggil.
4. getSnapshotBeforeUpdate()
Dalam method ini, kita diberikan akses ke props dan nilai state sebelum pembaruan dilakukan ke DOM. Meskipun fungsi render sudah dipanggil, kita masih bisa melihat nilai sebelumnya.
5. componentDidUpdate()
Method ini adalah yang terakhir dipanggil dalam fase ini. Seperti method sebelumnya, method ini juga menerima props sebelumnya dan nilai state sebagai argumen tetapi juga menerima nilai kembalian getSnapshotBeforeUpdate() sebagai argumen ketiga (jika ada).
Unmounting
Fase unmount adalah di mana komponen dihapus dari DOM. Ini menandai akhir dari siklus hidup komponen. Dalam fase ini, kita memiliki satu method yang tersedia, yaitu :
componentWillUnmount()
Method ini dijalankan tepat sebelum komponen dilepas dari DOM. Disini kita bisa membersihkan semua yang perlu dihapus sebelum komponen dihilangkan.
React Hooks - Function Component
Dan sejak React versi 16.81 diperkenalkan fitur baru yang bernama Hooks, dimana fitur ini memungkinkan kita menggunakan fitur-fitur yang ada di React tanpa menggunakan Class Component.
Hooks merupakan fungsi yang memungkinkan kita untuk “mengaitkan” state dan fitur-fitur lifecycle React di function component. Hooks tidak dapat berfungsi didalam Class Component.
Hooks akan kita pakai di dalam studi kasus ini, karena lebih simple dan mudah dibandingkan menggunakan Class Component. Di dalam studi kasus ini, kita akan sering menggunakan 2 hook yaitu : useState dan useEffect.
Berikut ini perbedaan antara Lifecycle dan Hooks yang ada di dalam React.
Lifecycle (Class Component) |
Hooks (Function Component) |
| Dikelanlkan sejak React versi awal. |
Dikenalkan sejak React versi 16.8 di tahun 2018. |
| Bekerja dengan JavaScript ES5. |
Bekerja dengan JavaScript ES6 dan yang lebih baru. |
Berbasis Class Component. |
Berbasis Function Component. |
Membutuhkan constructor untuk inisialisasi. |
Tidak membutuhkan constructor. |
Membutuhkan keyword this untuk update state |
Tidak membutuhkan keyword this untuk update state. |
useState
useState di panggil dalam function component untuk menambahkan suatu state lokal. React akan menyimpan state antar render. useState memberikan dua hal: nilai state saat ini dan fungsi untuk memperbarui nilai tersebut.
const [count, setCount] = useState(0);
Di atas, count merupakan state yang digunakan untuk menyimpan nilai-nya. Sedangkan setCount adalah method yang digunakan untuk memperbaru nilai dari state tersebut. Dan untuk useState(0) adalah nilai default yang kita berikan pada state tersebut.
Berikut ini contoh menggunakan useState untuk melakukan perhitungan.
import React, { useState } from 'react';
function Example() {
const [count, setCount] = useState(0);
return (
<div>
{/* cetak state "count" */}
<p>Anda klik sebanyak {count} kali</p>
{/* handle button click */}
<button onClick={() => setCount(count + 1)}>
Klik saya
</button>
</div>
);
}
Di atas, saat button di klik maka akan menjalankan handler dari state yaitu setCount. Dimana berisi nilai state yang ada dan ditambahkan angka 1.
setCount(count + 1)
useEffect
Kita tentunya pernah melakukan pengambilan data, berlangganan data (subscription), atau secara manual mengubah DOM dari komponen React sebelumnya. Teknik seperti ini dinamakan dengan “efek samping (side effects)” (atau singkatnya “efek (effects)”) karena dapat mempengaruhi komponen lain dan tidak dapat dilakukan pada saat proses render.
Effect Hook, useEffect, menambahkan kemampuan untuk melakukan “efek samping” dari sebuah function component. Hook ini memiliki fungsi yang sama dengan componentDidMount, componentDidUpdate, dan componentWillUnmount yang ada pada Class Component React, tetapi disatukan menjadi satu API.
Sebagai contoh, komponen berikut menetapkan judul halaman setelah React memperbarui DOM:
import React, { useState, useEffect } from 'react';
function Example() {
const [count, setCount] = useState(0);
useEffect(() => {
document.title = `You clicked ${count} times`;
});
return (
<div>
<p>You clicked {count} times</p>
<button onClick={() => setCount(count + 1)}>
Click me
</button>
</div>
);
}
Di atas, pada hook useEffect akan selalu dijalankan ketika ada perubahan baik tampilan atau data di dalam komponen.
Jika button di klik akan melakukan update nilai state count dan di dalam hook useEffect melakukan set judul halaman dengan data state yang telah diperbarui.
Hook useEffect biasa kita gunakan untuk menjalankan kode pada waktu :
- Komponen ditampilkan pertama kali (mounted).
- Ada sebuah perubahan yang terjadi pada State atau Props.
useEffect(()=>{
},[])
useEffect(()=>{
},[mystate, myprop])