- vừa được xem lúc

useMemo Hook trong React Component

0 0 14

Người đăng: vĩnh đặng văn

Theo Viblo Asia

useMemo

  • useMemo tránh cho việc tính toán lại một function lặp đi lặp lại nhiều lần mỗi lần component re-render.
  • Bản chất useMemo là caching lại giá trị return của function,
  • useMemo cho phép truyền vào 2 tham số: callback và dependencies, tại lần call đầu tiên, callback sẽ được gọi và cached lại giá trị trả về
  • Sau đó, mỗi khi bạn gọi lại useMemo, nó sẽ kiểm tra nếu bất kì khi nào dependencies thay đổi nó sẽ gọi lại callback để thực thi nó
  • Nếu không, nó sẽ trả về giá trị cũ đã được lưu trong bộ nhớ cache, không gọi hàm callback.
  • Sự khác biệt duy nhất là useEffect được dành cho side-effects, trong khi các function của useMemo được cho là tinh khiết (pure) và không có side-effects.

sử dụng

import React, { useMemo } from 'react'
const memoizedValue = useMemo(() => expensiveOperation(param), [param]);

Khi nào chúng ta nên sử dụng useMemo?

Đầu tiên, việc này rất quan trọng, code của bạn không phụ thuộc vào useMemo.
Nói cách khác, bạn nên thay thế useMemo bằng các hàm gọi trực tiếp và không thay đổi bất kì điều gì ảnh hưởng đến Project, trừ khi nó ảnh hưởng nhiều đến hiệu năng.

Cách tốt nhất để làm điều này là hãy suy nghĩ cách viết mã mà không cần dùng đến useMemo trước. Sau đó, hãy thêm nó vào nếu cần thiết.
Bản chất useMemo là caching lại giá trị return, hãy tập trung vào điều này, dưới đây là 1 function coi là expensive operation:

function ListedAllNumber({length}) { console.log("calculating..."); let numbers = []; for(let i = 0; i < length; i++) { numbers.push(i); return <p>Listed number: {numbers.join(",")}</p>
}

Nếu áp dụng useMemo:

function ListedAllNumber({length}) { console.log("calculating..."); let numbers = useMemo(() => { let results = []; for(let i = 0; i < length; i++) { results.push(i); return results; }, [length]) return <p>Listed number: {numbers.join(",")}</p>
}

Bằng việc sử dụng useMemo, Array [numbers] không còn tốn thời gian để tính toán nếu [length] không thay đổi.

Không lạm dụng useMemo

Mặc dù tối ưu hiệu suất là một mục tiêu cao cả, bạn vẫn nên cân nhắc những tác động và tác dụng phụ nó mang đến. Trong trường hợp đó:

  • đi kèm với cache lại giá trị return chính là vấn đề về bộ nhớ:
    Chưa kể đến cách code có đúng hay không, việc áp dụng thôi đã phát sinh thêm tài nguyên rồi, việc lạm dụng useMemo sẽ gây hại cho hiệu suất.
  • không đảm bảo:
    việc lưu lại giá trị của useMemo rất hữu ích trong một số trường hợp, nhưng bên cạnh đó cũng có những trường hợp yêu cầu phải chạy function, không chỉ là kết quả trả về.
    Khi thêm function vào useMemo, hãy chú ý điều này.

kết luận

  • useMemo được dùng để cache lại kết quả của các function tính toán phức tạp
  • Tuy nhiên nó cũng đang sử dụng thêm tài nguyên, nên hãy dùng nó cẩn thận
  • Có những function yêu cầu phải chạy lại, không chỉ là kết quả trả về

Bình luận

Bài viết tương tự

- vừa được xem lúc

Những điều cần lưu ý và sử dụng Hook trong React (Phần 5)

V. Sử dụng useRef như thế nào cho đúng.

0 0 127

- vừa được xem lúc

7 Cách viết code React "clean" hơn

Mở đầu. Là nhà phát triển React, tất cả chúng ta đều muốn viết code sạch hơn, đơn giản hơn và dễ đọc hơn. 1. Sử dụng JSX shorthands.

0 0 188

- vừa được xem lúc

Create app covid-19 use Reactjs

Chào các bạn hôm nay mình sẽ chia sẻ với các bạn một app covid-19, để mọi người cùng tham khảo, tính năng của App này chỉ đơn giản là show số liệu về dịch Covid của các nước trên thế giới như: Số ngườ

0 0 39

- vừa được xem lúc

ReactJS Custom Hooks

ReactJS cung cấp rất nhiều cho bạn các hook mà bạn có thể sử dụng hằng ngày vào project của mình. Nhưng bên cạnh đó bạn có thể tự tạo ra các hook của riêng bạn để sử dụng, làm cho việc tối ưu hóa code

0 0 65

- vừa được xem lúc

3 cách để tránh re-render khi dùng React context

3 cách để tránh re-render khi dùng React context. Nếu đã từng sử dụng React context cho dự án của bạn, và gặp phải tình trạng các component con - Consumer re-render rất nhiều lần, thậm chí bị sai logi

0 0 25

- vừa được xem lúc

Tìm hiểu về React Hook: Sử dụng useDebugValue

Trong bài viết hôm này, tôi sẽ giới thiệu các bạn một React Hook tiếp theo, đó là useDebugValue. useDebugValue là gì .

0 0 45