Cangkuk useMemo ialah cangkuk React terbina dalam yang membantu mengoptimumkan prestasi aplikasi anda dengan menghafal pengiraan mahal. Ia memastikan bahawa pengiraan tertentu hanya dilaksanakan semula apabila kebergantungan mereka berubah, bukannya pada setiap pemaparan. Ini amat berguna untuk mengelakkan pengiraan semula nilai yang tidak perlu apabila komponen dipaparkan semula.
useMemo digunakan untuk menghafal hasil panggilan fungsi yang mahal dan mengiranya semula hanya apabila salah satu kebergantungannya telah berubah. Ini boleh meningkatkan prestasi dengan mengelakkan pengiraan semula yang mahal pada setiap paparan.
const memoizedValue = useMemo(() => expensiveFunction(param1, param2), [param1, param2]);
Mari kita pertimbangkan contoh mudah di mana kita mempunyai pengiraan yang perlahan:
import React, { useState, useMemo } from 'react'; const ExpensiveComponent = () => { const [count, setCount] = useState(0); const [toggle, setToggle] = useState(false); const calculateExpensiveValue = (num) => { console.log('Calculating expensive value...'); return num * 2; }; // Memoizing the expensive function result const memoizedValue = useMemo(() => calculateExpensiveValue(count), [count]); return ( <div> <h2>Expensive Calculation: {memoizedValue}</h2> <button onClick={() => setCount(count + 1)}>Increment Count</button> <button onClick={() => setToggle(!toggle)}>Toggle</button> </div> ); }; export default ExpensiveComponent;
Penjelasan:
Mengapa menggunakan useMemo di sini?
Anda harus menggunakan useMemo apabila:
Pengiraan Mahal: Apabila anda mempunyai fungsi atau operasi yang mahal untuk dijalankan dan anda ingin mengelak daripada mengira semula kecuali sangat perlu (cth., menyusun tatasusunan yang besar atau pengiraan kompleks).
Elakkan pemaparan semula yang tidak perlu: Menghafal nilai yang dihantar kepada komponen kanak-kanak boleh menghalang pemaparan semula komponen kanak-kanak yang tidak perlu. Jika nilai yang dihafal tidak berubah, React boleh melangkau pemaparan komponen anak.
Mengoptimumkan Prestasi: Jika bahagian logik tertentu melibatkan pengiraan yang hanya bergantung pada prop atau keadaan tertentu, useMemo boleh memastikan fungsi berjalan hanya apabila kebergantungannya berubah, sekali gus mengoptimumkan prestasi.
Sebagai contoh, bayangkan anda memaparkan senarai item yang memerlukan pengisihan atau penapisan dan operasi ini mahal.
const memoizedValue = useMemo(() => expensiveFunction(param1, param2), [param1, param2]);
Jika anda mempunyai komponen anak yang menerima prop yang terhasil daripada pengiraan yang mahal, anda boleh menghafal pengiraan dan lulus hasilnya sebagai prop.
import React, { useState, useMemo } from 'react'; const ExpensiveComponent = () => { const [count, setCount] = useState(0); const [toggle, setToggle] = useState(false); const calculateExpensiveValue = (num) => { console.log('Calculating expensive value...'); return num * 2; }; // Memoizing the expensive function result const memoizedValue = useMemo(() => calculateExpensiveValue(count), [count]); return ( <div> <h2>Expensive Calculation: {memoizedValue}</h2> <button onClick={() => setCount(count + 1)}>Increment Count</button> <button onClick={() => setToggle(!toggle)}>Toggle</button> </div> ); }; export default ExpensiveComponent;
Jika komponen anda mempunyai berbilang nilai keadaan tetapi hanya satu yang mempengaruhi pengiraan yang mahal, anda boleh menggunakan useMemo untuk mengelakkan pengiraan semula nilai tersebut melainkan keadaan yang berkaitan telah berubah.
Walaupun kedua-dua useMemo dan useCallback digunakan untuk menghafal, tujuannya berbeza:
Hook | Purpose | Example Usage |
---|---|---|
useMemo | Memoizes the result of a function call or calculation | Memoizing a computed value |
useCallback | Memoizes the function itself | Preventing the creation of a new function on each render |
Berikut ialah contoh penggunaan useMemo untuk menghafal senarai yang diisih:
const memoizedValue = useMemo(() => expensiveFunction(param1, param2), [param1, param2]);
Kait useMemo ialah alat penting untuk mengoptimumkan prestasi dalam aplikasi React. Ia memastikan bahawa pengiraan mahal hanya dilakukan apabila perlu, menjadikan komponen anda lebih cekap. Walau bagaimanapun, ia harus digunakan dengan teliti, kerana penggunaan berlebihan boleh membawa kepada kerumitan yang tidak perlu dan potensi penurunan prestasi.
Atas ialah kandungan terperinci Mengoptimumkan Prestasi dengan penggunaan ReactMemo Hook: Menghafal Pengiraan Mahal. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!