ReactJS - Menggunakan useCallback: Panduan untuk Pemula

Hai, pengembang React masa depan! Hari ini, kita akan mendalami salah satu hook yang kuat di React: useCallback. Jangan khawatir jika Anda baru dalam pemrograman; saya akan menggembalakan Anda melalui konsep ini langkah demi langkah, seperti yang saya lakukan untuk banyak siswa selama tahun-tahun mengajar saya. Mari kita memulai perjalanan menarik ini bersama!

ReactJS - Using useCallback

Apa itu useCallback?

Sebelum kita masuk ke detailnya, mari kita pahami apa arti useCallback. Bayangkan Anda sedang membuat kue (saya menyukai analogi ini karena 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 perlu membuat kue, bukan mencoba mengingatnya setiap kali.

Dalam istilah React, useCallback adalah hook yang membantu kita optimalkan kinerja aplikasi kita dengan memoizing (menyimpan) fungsi.

Tanda Tangan Hook useCallback

Mari kita lihat bagaimana kita menulis useCallback:

const memoizedCallback = useCallback(
() => {
doSomething(a, b);
},
[a, b],
);

Jangan panik! Saya tahu ini mungkin terlihat kompleks, tapi kita akan membongkarnya:

  1. memoizedCallback: Ini adalah fungsi yang useCallback kembalikan.
  2. () => { doSomething(a, b); }: Ini adalah fungsi yang kita ingin memoize.
  3. [a, b]: Ini disebut array dependensi. Itu memberitahu React kapan membuat lagi fungsi kita.

Pertimbangkan ini: Anda memberitahu React, "Hey, ingatkan ini fungsi 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>
);
}

Mari kitauraikan ini:

  1. Kita import useCallback dari React.
  2. Kita buat variabel state count menggunakan useState.
  3. Kita tentukan fungsi increment menggunakan useCallback. Fungsi ini akan menambahkan 1 ke nilai count.
  4. Array kosong [] sebagai argumen kedua berarti fungsi ini tidak akan pernah berubah.
  5. Kita render nilai count dan tombol yang memanggil increment saat diklik.

Kasus Penggunaan useCallback

Sekarang Anda mungkin bertanya-tanya, "Kapan harus saya gunakan useCallback?" Pregunta bagus! Mari kita lihat beberapa kasus umum:

1. Menyampaikan Callback ke Komponen Anak yang Tergantung

Bayangkan Anda memiliki komponen anak yang dibungkus oleh React.memo (jangan khawatir saat ini, kita akan membahasnya di lesyon berikutnya). Anda ingin menyampaikan 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 hook useEffect:

import React, { useState, useCallback, useEffect } from 'react';

function DataFetcher() {
const [data, setData] = useState(null);

const fetchData = useCallback(() => {
// Bayangkan ini sedang mengambil 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 secara tidak diperlukan.

Keuntungan dan Kerugian

Mari rangkum keuntungan dan kerugian dari useCallback:

Keuntungan Kerugian
Mencegah re-render yang tidak diperlukan Dapat membuat kode lebih kompleks
Optimalkan kinerja untuk komponen anak Overuse dapat menyebabkan masalah kinerja
Berguna dalam dependensi useEffect Memerlukan pemahaman tentang closure dan memoization
membantu membuat callback stabil Mungkin tidak memberikan keuntungan signifikan dalam komponen sederhana

Kesimpulan

Wah! Kita telah meliputi banyak hal hari ini. useCallback adalah alat kuat dalam peralatan React Anda, tetapi seperti segala alat, penting untuk digunakan bijaksana. Selama Anda terus belajar React, Anda akan mengembangkan直觉 untuk kapan menggunakannya.

Ingat, optimisasi adalah hal yang bagus, tetapi kode yang jelas dan mudah dibaca adalah yang lebih penting. Jangan merasa terpaksa untuk menggunakan useCallback di mana-mana – gunakan saja saat itu cocok untuk aplikasi Anda.

Teruslatih, tetap curioso, dan happy coding! Dan ingat, seperti memperfectioning resep kue, memahami React memerlukan waktu dan kesabaran. Anda bisa melakukan ini!

Credits: Image by storyset