Pelajari cara menggunakan useMemo di React untuk meningkatkan performa dengan teknik sederhana.
useMemo
adalah hook yang disediakan oleh React untuk mengoptimalkan performa aplikasi. Hook ini memungkinkan komponen untuk "mengingat" hasil perhitungan yang berat atau kompleks, sehingga perhitungan tersebut tidak perlu diulang pada setiap render.
useMemo
bekerja dengan menyimpan hasil perhitungan dalam memori dan hanya melakukan perhitungan kembali jika salah satu dependensinya berubah. Dengan cara ini, useMemo
membantu mengurangi beban perhitungan yang tidak perlu dan meningkatkan efisiensi rendering komponen.
useMemo
sebaiknya digunakan dalam situasi-situasi tertentu di React untuk meningkatkan performa aplikasi. Berikut adalah beberapa skenario di mana useMemo
menjadi sangat berguna:
Perhitungan Berat: Jika komponen melakukan perhitungan yang intensif secara komputasi dan hasilnya tidak sering berubah, useMemo
dapat digunakan untuk menghindari perhitungan ulang yang tidak perlu setiap kali komponen dirender.
Komponen Anak yang Sensitif terhadap Perubahan Objek/Array: Ketika sebuah objek atau array dikirim sebagai prop ke komponen anak, dan komponen anak tersebut melakukan rendering ulang hanya karena objek atau array tersebut dibuat ulang pada setiap render meski isinya sama, useMemo
dapat digunakan untuk memastikan objek atau array tersebut tetap memiliki referensi yang sama selama isinya tidak berubah.
Optimasi Performa dalam Kasus Tertentu: Dalam kasus-kasus di mana perubahan prop atau state tidak mempengaruhi output dari suatu perhitungan, useMemo
dapat mengurangi biaya komputasi dengan mengingat hasil perhitungan sebelumnya.
Mencegah Render Ulang yang Tidak Perlu: Jika perhitungan yang dilakukan dalam komponen menyebabkan komponen lain melakukan render ulang tanpa alasan yang valid, useMemo
bisa digunakan untuk mencegah hal ini.
Namun, penting untuk diingat bahwa useMemo
sebaiknya digunakan dengan hati-hati. Menggunakannya secara tidak tepat atau berlebihan dapat justru menambah kerumitan dan overhead pada aplikasi. Penggunaan useMemo
harus didasarkan pada analisis performa yang nyata dan bukan hanya dugaan atau asumsi.
Berikut adalah contoh kode yang menggunakan useMemo
:
const MyComponent = ({ input }) => {
const memoizedResult = useMemo(() => {
// Expensive calculation or operation
let result = ...;
return result;
}, [input]);
return (
<div>{memoizedResult}</div>
);
};
Dalam contoh ini, memoizedResult
akan menyimpan hasil dari perhitungan yang mahal. Fungsi perhitungan dijalankan jika dan hanya jika input
berubah, menghindari eksekusi berulang pada setiap render komponen.
Dalam contoh ini, saya akan membuat komponen dengan nama AverageCalculator.jsx
. Komponen ini akan menerima dua props: numbers
(array angka) dan threshold
(nilai ambang batas). Komponen ini akan dipanggil melalui komponen lain dan pada contoh ini, saya akan memanggilnya tepat di App.jsx
.
import React, { useMemo } from 'react';
const AverageCalculator = ({ numbers, threshold }) => {
const calculateAverage = (nums) => {
const filteredNumbers = nums.filter(num => num > threshold);
const total = filteredNumbers.reduce((acc, num) => acc + num, 0);
return filteredNumbers.length > 0 ? total / filteredNumbers.length : 0;
};
const average = useMemo(() => calculateAverage(numbers), [numbers, threshold]);
return (
<div>
<h3>Average of numbers greater than {threshold}: {average.toFixed(2)}</h3>
</div>
);
};
export default AverageCalculator;
import React from 'react';
import AverageCalculator from './AverageCalculator';
const App = () => {
const numbers = [10, 20, 30, 40, 50];
const threshold = 25;
return (
<div>
<h1>My React App</h1>
<AverageCalculator numbers={numbers} threshold={threshold} />
</div>
);
};
export default App;
calculateAverage
adalah fungsi yang menghitung rata-rata.useMemo
digunakan untuk menyimpan hasil perhitungan rata-rata.Dengan cara ini, AverageCalculator
akan menerima array angka dan nilai ambang batas, menghitung rata-rata berdasarkan kondisi yang ditetapkan, dan menampilkan hasilnya. Ini adalah cara efektif untuk menangani operasi yang kompleks dan memastikan bahwa perhitungan hanya dilakukan ketika diperlukan, yaitu ketika numbers
atau threshold
berubah.
Ada beberapa situasi di mana useMemo
tidak perlu atau bahkan tidak disarankan untuk digunakan. Berikut ini adalah penjelasan beserta contoh kasus di mana penggunaan useMemo
tidak diperlukan:
Jika Anda hanya melakukan perhitungan atau operasi yang sederhana dan ringan, penggunaan useMemo
bisa jadi berlebihan. React sendiri sangat efisien dalam menangani perubahan dan rendering, sehingga untuk operasi ringan, overhead tambahan untuk memoization bisa jadi lebih mahal daripada manfaat yang diberikan.
const SimpleComponent = ({ number }) => {
const doubledValue = number * 2;
return <div>Doubled Value: {doubledValue}</div>;
};
Dalam kasus ini, menggandakan nilai adalah operasi yang sangat ringan dan tidak memerlukan useMemo
.
Jika komponen Anda tidak sering dire-render atau perubahan pada props dan state jarang terjadi, penggunaan useMemo
mungkin tidak memberikan peningkatan performa yang signifikan. Memoization lebih bermanfaat dalam situasi di mana komponen sering dire-render dengan props atau state yang sama.
const StaticComponent = ({ text }) => {
return <div>{text}</div>;
};
Dalam kasus komponen yang hanya menampilkan teks dan jarang mengalami perubahan, penggunaan useMemo
tidak akan memberikan manfaat yang berarti.
Jika nilai dependensi yang Anda gunakan dalam useMemo
selalu berubah setiap kali komponen dirender, maka tidak ada manfaat dalam menggunakan useMemo
. Ini karena memoization akan selalu diinvalidasi dan perhitungan akan dijalankan kembali setiap kali.
const ChangingComponent = ({ objectProp }) => {
const processedValue = useMemo(() => {
// Operasi kompleks
}, [objectProp]);
return <div>{processedValue}</div>;
};
Jika objectProp
selalu merupakan objek baru pada setiap render, maka useMemo
di sini tidak efektif.
useMemo
adalah alat yang kuat untuk optimasi, tapi seperti alat lainnya, harus digunakan dengan tepat. Penggunaannya harus didasarkan pada kebutuhan aktual dan analisis kinerja, bukan hanya sebagai alat default untuk setiap situasi. Penggunaan useMemo
yang tidak tepat dapat menyebabkan kode yang lebih kompleks dan overhead yang tidak perlu.
Saya Irsyad. Terima kasih telah menyimak. Sampai bertemu di artikel berikutnya dengan lebih banyak wawasan dan pembahasan yang menarik!
Let's start living like no one can help us in any event, so that when we are helped in certain times, it becomes a plus in itself.