ReactJS - Menggunakan useCallback: Panduan untuk Pemula
Hai, pengembang React masa depan! Hari ini, kita akan mendalami salah satu hook yang kuat dari React: useCallback
. Jangan khawatir jika Anda baru belajar pemrograman; saya akan memandu Anda melalui konsep ini secara bertahap, seperti yang saya lakukan untuk banyak siswa selama tahun-tahun pengajaran saya. Mari kita mulai perjalanan menarik ini bersama!
Apa itu useCallback?
Sebelum kita masuk ke detailnya, mari kita pahami apa itu useCallback
. Bayangkan Anda sedang membuat kue (saya menyukai analogi ini karena, well, siapa yang tidak menyukai kue?). Anda memiliki resep khusus yang Anda gunakan setiap kali. useCallback
seperti menulis resep itu sekali dan menggunakannya setiap kali Anda ingin membuat kue, bukan mencoba untuk mengingatnya setiap kali.
Dalam istilah React, useCallback
adalah hook yang membantu kita optimalkan performa aplikasi kita dengan memoizing (menyimpan) fungsi.
Tanda Tangan Hook useCallback
Marilah kita lihat bagaimana menulis useCallback
:
const memoizedCallback = useCallback(
() => {
doSomething(a, b);
},
[a, b],
);
Jangan panik! Saya tahu ini mungkin terlihat kompleks, tapi kita akan membongkarnya:
-
memoizedCallback
: Ini adalah fungsi yanguseCallback
kembalikan. -
() => { doSomething(a, b); }
: Ini adalah fungsi yang kita ingin memoize. -
[a, b]
: Ini disebut array dependensi. Ini memberitahu React kapan membuat lagi fungsi kita.
Pikirkan seperti ini: Anda memberitahu React, "Hey, ingatkan ini untuk saya, dan hanya berikan saya yang baru jika a
atau b
berubah."
Menggunakan useCallback
Sekarang, mari kita lihat useCallback
dalam aksi dengan contoh sederhana:
import React, { useState, useCallback } from 'react';
function Counter() {
const [count, setCount] = useState(0);
const increment = useCallback(() => {
setCount(c => c + 1);
}, []);
return (
<div>
Count: {count}
<button onClick={increment}>Increment</button>
</div>
);
}
Bongkarlah ini:
- Kita import
useCallback
dari React. - Kita buat variabel state
count
menggunakanuseState
. - Kita definisikan fungsi
increment
menggunakanuseCallback
. Fungsi ini akan meningkatkan angka kita sebanyak 1. - Array kosong
[]
sebagai argumen kedua berarti fungsi ini tidak akan pernah berubah. - Kita render angka kita dan tombol yang memanggil
increment
saat ditekan.
Kasus Penggunaan useCallback
Sekarang Anda mungkin bertanya-tanya, "Kapan harus saya gunakan useCallback
?" Pertanyaan bagus! Mari kita lihat beberapa scenario umum:
1. Mengirim Callback ke Komponen Anak yang Dioptimalkan
Bayangkan Anda memiliki komponen anak yang dibungkus oleh React.memo
(jangan khawatir tentang ini saat ini, kita akan bahasnya di lesan berikutnya). Anda ingin mengirimkan fungsi ke komponen ini:
import React, { useState, useCallback } from 'react';
function ParentComponent() {
const [count, setCount] = useState(0);
const handleClick = useCallback(() => {
setCount(count + 1);
}, [count]);
return (
<div>
<ChildComponent onClick={handleClick} />
<p>Count: {count}</p>
</div>
);
}
const ChildComponent = React.memo(({ onClick }) => {
console.log("Child rendered!");
return <button onClick={onClick}>Increment</button>;
});
Di sini, useCallback
memastikan bahwa handleClick
hanya berubah jika count
berubah, mencegah re-render yang tidak diperlukan dari ChildComponent
.
2. Dalam Dependensi useEffect
useCallback
juga berguna saat fungsi adalah dependensi dari hook useEffect
:
import React, { useState, useCallback, useEffect } from 'react';
function DataFetcher() {
const [data, setData] = useState(null);
const fetchData = useCallback(() => {
// Bayangkan ini adalah pengambilan data dari API
setTimeout(() => setData("New Data!"), 1000);
}, []);
useEffect(() => {
fetchData();
}, [fetchData]);
return <div>{data ? data : "Loading..."}</div>;
}
Dalam contoh ini, useCallback
memastikan bahwa fetchData
tidak berubah pada setiap render, mencegah effect berjalan tanpa perlu.
Keuntungan dan Kerugian
Marilah kita rangkum keuntungan dan kerugian dari useCallback
:
Keuntungan | Kerugian |
---|---|
Mencegah re-render yang tidak diperlukan | Dapat membuat kode lebih kompleks |
Optimalkan performa untuk komponen anak | Pemakaian berlebihan dapat menyebabkan masalah performa |
Berguna dalam dependensi useEffect
|
Memerlukan pemahaman tentang closure dan memoization |
membantu membuat callback stabil | Mungkin tidak memberikan keuntungan yang signifikan dalam komponen sederhana |
Kesimpulan
Wah! Kita telah menempuh banyak hal hari ini. useCallback
adalah alat kuat dalam peralatan React Anda, tapi seperti semua alat, penting untuk digunakan bijak. Sebagai Anda terus melanjutkan perjalanan React Anda, Anda akan mengembangkan keadaan untuk mencari useCallback
.
Ingat, optimisasi adalah hal yang bagus, tapi kode yang jelas dan mudah dibaca adalah yang lebih penting. Jangan merasa terpaksa untuk menggunakan useCallback
di mana-mana – gunakanlah saat itu cocok untuk aplikasi Anda.
Terus latih, tetap bersemangat, dan selamat coding! Dan ingat, seperti memperfect resep kue, menguasai React memerlukan waktu dan kesabaran. Anda bisa melakukan ini!
Credits: Image by storyset