Cách dùng refetchInterval để dừng useQuery khi thỏa 1 điều kiện nhất định

185 lượt xem

profile picture

Ẩ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

Ảnh đại diện của Tín Nguyễn

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.

Xem thêm

Đồng ý với Điều khoản dịch vụ Chính sách bảo mật của Careerly

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.