Sức mạnh của các hook tối ưu hóa hiệu suất trong React: useMemo, useCallback và React.memo

May 04 2023
Khi nói đến việc xây dựng các ứng dụng React, điều quan trọng là phải tối ưu hóa hiệu suất càng nhiều càng tốt. Một trong những cách hiệu quả nhất để làm điều này là sử dụng hook tối ưu hóa hiệu suất của React: useMemo, useCallback và React.
Ảnh của Markus Spiske trên Bapt

Khi nói đến việc xây dựng các ứng dụng React, điều quan trọng là phải tối ưu hóa hiệu suất càng nhiều càng tốt. Một trong những cách hiệu quả nhất để làm điều này là sử dụng hooks tối ưu hóa hiệu suất của React: useMemo, useCallback, và React.memo. Trong bài viết này, chúng ta sẽ đi sâu vào từng hook này, chức năng của chúng và thời điểm sử dụng chúng.

là gì useMemo?

useMemolà một hook cho phép bạn ghi nhớ kết quả của một hàm, để nó chỉ được tính toán lại khi các thành phần phụ thuộc của nó thay đổi. Điều này đặc biệt hữu ích khi bạn muốn chạy một chức năng tính toán tốn kém, nhưng chỉ khi cần thiết. Bằng cách sử dụng useMemo, bạn có thể ngăn hiển thị lại không cần thiết và cải thiện hiệu suất ứng dụng của mình.

Đây là một ví dụ về cách sử dụng useMemo:

import React, { useMemo } from 'react';

function MyComponent({ data }) {
  const expensiveFunction = useMemo(() => {
    // perform some expensive operation
    return data.map((item) => item * 2);
  }, [data]);

  return (
    <div>
      {/* use the result of the expensive function */}
      {expensiveFunction.map((item) => (
        <div>{item}</div>
      ))}
    </div>
  );
}

là gì useCallback?

useCallbacklà một hook cho phép bạn ghi nhớ một chức năng, để nó chỉ được tạo lại khi các thành phần phụ thuộc của nó thay đổi. Điều này hữu ích khi bạn có một chức năng được sử dụng làm chỗ dựa cho một thành phần con, nhưng chức năng đó thay đổi trên mỗi lần kết xuất. Bằng cách sử dụng useCallback, bạn có thể ngăn việc kết xuất lại không cần thiết của thành phần con.

Đây là một ví dụ về cách sử dụng useCallback:

import React, { useCallback } from 'react';
import ChildComponent from './ChildComponent';

function MyComponent({ data }) {
  const handleClick = useCallback(() => {
    console.log('clicked');
  }, []);

  return (
    <div>
      <ChildComponent onClick={handleClick} />
    </div>
  );
}

là gì React.memo?

React.memolà một thành phần bậc cao hơn (HOC) cho phép bạn ghi nhớ một thành phần, để nó chỉ được kết xuất lại khi các đạo cụ của nó thay đổi. Điều này hữu ích khi bạn có một thành phần đắt tiền để kết xuất, nhưng các đạo cụ của nó không thay đổi thường xuyên. Bằng cách sử dụng React.memo, bạn có thể ngăn việc kết xuất lại thành phần không cần thiết.

Đây là một ví dụ về cách sử dụng React.memo:

import React from 'react';
import ListItem from './ListItem';

const List = React.memo(({ items }) => {
  console.log('Rendering List...');
  return (
    <ul>
      {items.map((item) => (
        <ListItem key={item.id} item={item} />
      ))}
    </ul>
  );
});

export default List;

Khi nào sử dụng mỗi móc

Sử dụng useMemokhi bạn có một tính toán nặng không cần thiết phải thực hiện trên mỗi kết xuất. Sử dụng useCallbackkhi bạn có một chức năng được truyền dưới dạng chỗ dựa và bạn muốn tránh kết xuất lại không cần thiết. Sử dụng React.memokhi bạn có một thành phần nhận các đạo cụ nhưng không phụ thuộc vào trạng thái của nó và bạn muốn tránh kết xuất lại không cần thiết. Mỗi hook này có thể cải thiện đáng kể hiệu suất của ứng dụng của bạn trong những trường hợp phù hợp.

Cách sử dụng chung

Điều quan trọng là sử dụng các hook tối ưu hóa hiệu suất một cách thận trọng và chỉ khi chúng mang lại lợi ích hiệu suất rõ ràng. Mặc dù useMemo, useCallback và React.memo có thể cải thiện đáng kể hiệu suất của ứng dụng React của bạn trong những trường hợp phù hợp, nhưng chúng cũng có thể thêm độ phức tạp không cần thiết và giảm khả năng đọc mã nếu bị lạm dụng. Điều quan trọng là phải xem xét cẩn thận sự đánh đổi của việc sử dụng các hook này và chỉ sử dụng chúng khi chúng mang lại lợi ích hiệu suất rõ ràng. Ngoài ra, điều quan trọng là lập hồ sơ ứng dụng của bạn và sử dụng các công cụ giám sát hiệu suất để đảm bảo rằng các tối ưu hóa của bạn đang thực sự cải thiện hiệu suất.

Phần kết luận

tối ưu hóa hiệu suất là rất quan trọng trong việc xây dựng các ứng dụng React chất lượng cao. Bằng cách sử dụng useMemo, useCallback và React.memo, các nhà phát triển có thể cải thiện hiệu quả của các ứng dụng của họ bằng cách tránh kết xuất lại không cần thiết và tối ưu hóa việc sử dụng bộ nhớ. Điều quan trọng là phải hiểu mục đích và chức năng của từng hook và sử dụng chúng một cách thận trọng trong các trường hợp phù hợp để đạt được hiệu suất tối ưu hóa tốt nhất có thể.