42 lượt xem
Ẩn danh
Ngày 23 Tháng 05
Mình có câu hỏi liên quan đến react-query useQuery. Điều kiện là phải fetching data theo chu kỳ cho đến khi đạt được điều kiện nhất định, nhưng mình ko biết có thể dừng useQuery như nào cho đúng, mình có tìm hiểu được là có thể dùng refetchInterval nhưng chưa hiểu rõ lắm cách dùng. Ko biết có ai có thể giúp mình đc ko?
Đánh giá câu hỏi ngay!
Hãy ấn ↑Up Vote với những câu hỏi cụ thể và chi tiết
Hãy ấn ↓Down Vote với những câu hỏi chưa rõ ràng Careerly sẽ nhắc người hỏi chỉnh sửa lại.
1 câu trả lời
BEST
Mình chưa dùng thử cái này, nhưng mà dựa trên doc của nó thì mình gợi ý bạn cách sử dụng nhé: https://tanstack.com/query/v4/docs/react/reference/useQuery Theo Doc thì interface của params refetchInterval là refetchInterval: number | false | ((data: TData | undefined, query: Query) => number | false) Ở đây ngoài việc mang giá trị number (con số config để nó refetch theo một khoản thời gian, thì bạn có thể truyền vào một hàm nhận vào data và query của lần gần nhất. Theo bài code của bạn thì mình nghĩ có thể dùng cách này. Nếu status pending thì trả về 2s, nếu fulfill thì trả về false. (Mình đoạn dựa vào context nhé, bạn có thể xem code ở dưới) Ngoài ra, mình thấy hook useQuery cũng có trả về hàm refetch, bạn có thể sử dụng với useEffect để có thể tự gọi refetch. Mình cũng đính kèm code ở dưới nhé
1// Cách 1. Sử dụng refetchInterval
2refetchInterval = (data) => {
3 if (data.status === "pending") {
4 return 2000;
5 }
6
7 return false;
8}
9
10// Cách 2. Sử dụng refetch
11const { data, refetch } = useQuery(
12 ['getBookingStatus', { id }],
13 fetchBookingStatus
14);
15
16useEffect(() => {
17 if (data.status === "pending") {
18 const intervalId = setInterval(() => {
19 refetch();
20 }, 2000); // 2seconds
21
22 return () => clearInterval(intervalId)
23 } else {
24 return;
25 }
26}, [data, refetch])
Đăng ký ngay bây giờ để đọc toàn bộ câu trả lời!
Cộng đồng lập trình viên sẽ giải đáp tường tận cho bạn.
Bạn đã có tài khoản rồi?
Đăng ký ngay bây giờ để đọc toàn bộ câu trả lời!
Cộng đồng lập trình viên sẽ giải đáp tường tận cho bạn.