Hỏi đáp Hot

Làm sao để optimize performance React app khi có nhiều re-render?

NV
Nguyễn Văn An12Thành viên
450 điểm
2 tháng trước567 lượt xem

Chào mọi người,

Mình đang làm một app React khá lớn và gặp vấn đề về performance. App có nhiều component nested và khi state thay đổi thì rất nhiều component bị re-render không cần thiết.

Mình đã thử:

- React.memo cho các component

- useMemo và useCallback

Nhưng vẫn chưa optimize được nhiều. Mọi người có tip gì không ạ?

Code structure hiện tại:

```jsx

<App>

<Header />

<Sidebar>

<Navigation />

<UserInfo />

</Sidebar>

<Main>

<ProductList>

<ProductCard /> x 100

</ProductList>

</Main>

</App>

```

Cảm ơn mọi người!

Bình luận (3)

Tip: Sử dụng toolbar để format text, chèn code hoặc ảnh

Câu trả lời được chọn
Sơn Đặng52
Với trường hợp của bạn, mình recommend thử những cách sau: 1. **Virtualization:** Với 100 ProductCard, bạn nên dùng react-window hoặc react-virtualized để chỉ render những items trong viewport. 2. **State management:** Thay vì để state ở App level, hãy dùng context hoặc zustand để tách state. Mỗi component chỉ subscribe những state nó cần. 3. **Code splitting:** Lazy load những component không cần thiết lúc đầu. ```jsx const ProductList = React.lazy(() => import('./ProductList')) ``` 4. **React DevTools Profiler:** Dùng tool này để xem chính xác component nào re-render và tại sao. Hy vọng giúp được bạn!
👍❤️45
2 tháng trước
NV
NV
Nguyễn Văn An12
Cảm ơn anh nhiều! Mình sẽ thử react-window trước. Đúng là 100 cards render 1 lúc hơi nhiều.
👍❤️5
2 tháng trước
MN
MN
Minh Nguyễn78
Bổ sung thêm: bạn có thể dùng `React.memo` với custom comparator function để kiểm soát khi nào component cần re-render: ```jsx const ProductCard = React.memo(({ product }) => { // ... }, (prevProps, nextProps) => { return prevProps.product.id === nextProps.product.id && prevProps.product.price === nextProps.product.price }) ``` Còn với state, thử dùng Jotai hoặc Zustand thay vì useState/useContext. Chúng có selective subscription tốt hơn.
👍❤️28
2 tháng trước