⊗jsrtPmHkUTr 17 of 47 menu

Hook tối ưu hiệu suất useTransition trong React

Hook tối ưu hiệu suất useTransition cho phép chúng ta cập nhật state mà không chặn giao diện người dùng.

Với hook này, chúng ta có thể đặt mức độ ưu tiên thấp cho việc cập nhật một state nào đó, cho phép việc cập nhật các state khác có độ ưu tiên cao và thực hiện mà không bị trì hoãn.

Một ví dụ có thể là việc lọc danh sách sản phẩm thả xuống khi người dùng nhập ký tự vào trường tìm kiếm. Tất nhiên, bản thân danh sách có thể hiển thị với một độ trễ nào đó, nhưng chúng ta không muốn các ký tự được nhập vào trường tìm kiếm với độ trễ.

Hãy xem, trong những trường hợp như vậy hook useTransition có thể giúp chúng ta như thế nào. Giả sử, chúng ta có một đoạn mã của component chính. Hãy phân tích nó:

import { useTransition } from 'react'; import { useState } from 'react'; function App() { const [isPending, startTransition] = useTransition(); const [filterTerm, setFilterTerm] = useState(''); const filteredProducts = filterProducts(filterTerm); function updateFilterHandler(event) { startTransition(() => { setFilterTerm(event.target.value); }); } return ( <div> <input type="text" onChange={updateFilterHandler} /> <ProductList products={filteredProducts} /> </div> ); }

Ở đây chúng ta thấy hai biến cho useTransition. Biến isPending chứa giá trị boolean và cho biết quá trình cập nhật đã kết thúc chưa, còn startTransition là một hàm cho phép giảm mức độ ưu tiên của việc cập nhật:

const [isPending, startTransition] = useTransition();

Chúng ta cũng có state filterTerm, nơi lưu trữ biểu thức được nhập vào trường nhập liệu và hàm setFilterTerm để thiết lập nó:

const [filterTerm, setFilterTerm] = useState('');

Khi nhập ký tự vào input, hàm updateFilterHandler được gọi mỗi lần, trong đó việc cập nhật filterTerm diễn ra. Chính tại đây chúng ta áp dụng hook useTransition của mình, bằng cách bao bọc hàm thiết lập setFilterTerm trong startTransition như sau:

function updateFilterHandler(event) { startTransition(() => { setFilterTerm(event.target.value); }); }

Bằng cách này, chúng ta đã đặt mức độ ưu tiên thấp cho việc cập nhật state filterTerm và trường nhập liệu của chúng ta vẫn sẽ phản hồi nhanh.

Thông qua biến isPending, chúng ta có thể hiển thị cho người dùng thấy rằng việc cập nhật danh sách vẫn đang diễn ra. Hãy xuất thông tin này bên dưới trường nhập liệu, trong khi danh sách đang được cập nhật:

return ( <div> <input type="text" onChange={updateFilterHandler} /> {isPending && <p>updating ...</p>} <ProductList products={filteredProducts} /> </div> );
Tiếng Việt
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbek
Chúng tôi sử dụng cookie để vận hành trang web, phân tích và cá nhân hóa. Việc xử lý dữ liệu được thực hiện tuân theo Chính sách bảo mật.
chấp nhận tất cả tùy chỉnh từ chối