⊗jsrtPmHkUMe 14 of 47 menu

Hook Optimasi Performa useMemo di React

Hook pertama untuk optimasi performansi yang akan kita bahas adalah useMemo.

Hook ini membantu meng-cache hasil operasi yang memakan sumber daya antara momen render ulang layar dan karenanya dapat membantu menghindari komputasi yang berat dan tidak perlu. Cache semacam ini juga disebut memoization.

Mari kita lihat cara kerjanya. Ayo buat komponen dengan tombol dan judul h3:

return ( <div> <h3>Text</h3> <button>click</button> </div> );

Dan sekarang mari kita buat agar saat diklik judul, warnanya berubah dari oranye menjadi hijau dan sebaliknya. Pertama-tama mari buat state isGreen:

const [isGreen, setIsGreen] = useState(false);

Mari tambahkan kondisi perubahan warna pada atribut style judul dan pasang penangan klik:

<h3 onClick={() => setIsGreen(!isGreen)} style={{ color: isGreen ? 'green' : 'orangered' }} >Text</h3>

Misalkan kita juga memiliki nilai tertentu, yang akan bertambah satu per satu saat diklik pada tombol kita. Mari buat state untuknya:

const [num, setNum] = useState(0);

Mari tambahkan penanganan klik pada tombol:

<button onClick={() => setNum(num + 1)}> clicks </button>

Misalkan kita juga memiliki fungsi tertentu square, yang akan mengembalikan kuadrat dari nilai num. Hasil pemanggilan fungsi akan kita simpan dalam variabel result:

const result = square(num); function square(num) { return num * num; }

Mari tampilkan result dalam teks tombol:

<button onClick={() => setNum(num + 1)}> clicks: {result} </button>

Hasilnya, kita mendapatkan yang berikut: saat tombol diklik, nilai num berubah, yang kemudian dikuadratkan, dan saat judul diklik warna judul berubah.

Komponen kita sangat kecil, semuanya bekerja dengan cepat, meskipun saat diklik pada judul untuk mengubah warnanya, seluruh komponen di-render ulang, karenanya perhitungan yang terkait dengan tombol juga terjadi lagi, bahkan meskipun kita tidak menyentuhnya. Dan sekarang bayangkan jika perhitungan kita berat dan semuanya dihitung ulang setiap kali.

Mari kita beri sedikit beban pada fungsi kita, sekarang ia akan "berpikir" sedikit lebih lama. Dengan demikian kita mensimulasikan komputasi yang lama:

function square(num) { let startTime = performance.now(); while (performance.now() - startTime < 500) { // Hanya tidak melakukan apa-apa ... } return num * num; }

Sekarang coba klik judulnya. Ternyata, sekarang karena fungsi square bekerja lama (dan kita tidak menyentuh tombolnya) kita harus menunggu sangat lama untuk mengubah warna judul!

Di sinilah hook useMemo akan membantu kita. Untuk itu, kita perlu mengirimkan parameter pertama sebuah fungsi yang menghitung nilai yang ingin kita-cache, fungsi ini harus murni dan tidak menerima parameter apa pun. Dan parameter kedua - dependensi dalam kurung siku dengan kata lain, semua nilai reaktif yang terlibat dalam kode fungsi. Dengan demikian, di result sekarang kita akan menulis konstruksi seperti ini:

const result = useMemo(() => square(num), [num]);

Mari klik judul lagi. Sekarang, jika kita tidak menyentuh tombol dengan komputasi dan tidak mengubah nilai state num, maka tidak ada yang dihitung ulang, dan React menampilkan nilai yang di-cache pada tombol, itulah sebabnya judul kita dengan cepat mengubah warnanya.

Buat komponen App, tempatkan sebuah paragraf di dalamnya. Buat state text dengan nilai awal 'react', biarkan nilai state ditampilkan sebagai teks paragraf. Saat diklik pada paragraf, tambahkan tanda seru di akhir teksnya.

Buat state lain num, dengan nilai awal 0. Tempatkan di App paragraf lain. Buat agar saat diklik padanya, num bertambah sebesar 1.

Dan sekarang tambahkan ke App fungsi triple, yang menerima parameter num dan mengembalikan nilai tiga kali lipatnya. Simpan hasil pemanggilan fungsi ke dalam variabel result. Tampilkan result sebagai teks paragraf kedua. Coba klik paragraf secara bergantian, perhatikan betapa lambatnya tanda seru ditambahkan.

Perbaiki situasinya, dengan membungkus fungsi yang lambat triple dalam useMemo.

Indonesia
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Kami menggunakan cookie untuk operasi situs, analitik, dan personalisasi. Pemrosesan data dilakukan sesuai dengan Kebijakan Privasi.
terima semua atur tolak