Sebuah form input tinggi badan dan berat badan. Kita hitung apakah berat badan ideal dengan rumus Broca (contohnya), dan optimasi perhitungannya dengan useMemo.
Kode:
jsxCopyEditimport React, { useState, useMemo } from 'react';
function IdealWeightCalculator() {
const [height, setHeight] = useState(170);
const [weight, setWeight] = useState(65);
const idealWeight = useMemo(() => {
console.log('Calculating ideal weight...');
return (height - 100) - ((height - 100) * 0.1); // rumus Broca
}, [height]);
const isIdeal = weight === Math.round(idealWeight);
return (
<div>
<h1>Ideal Weight Checker</h1>
<div>
<label>Height (cm): </label>
<input
type="number"
value={height}
onChange={(e) => setHeight(+e.target.value)}
/>
</div>
<div>
<label>Weight (kg): </label>
<input
type="number"
value={weight}
onChange={(e) => setWeight(+e.target.value)}
/>
</div>
<p>Ideal Weight: {Math.round(idealWeight)} kg</p>
<p>Status: {isIdeal ? 'Ideal' : 'Belum ideal'}</p>
</div>
);
}Penjelasan useMemo:
- useMemo menyimpan hasil kalkulasi agar tidak dihitung ulang saat render kecuali height berubah.
- Tanpa useMemo, setiap render akan menghitung ulang walau height tidak berubah.
- Cocok untuk kalkulasi berat, data berat, statistik besar, dll.