216 lượt xem
Ẩn danh
Ngày 17 Tháng 05
Hiện tại mình đang dùng react-query để nhận thông tin của user và dùng return data để sử dụng data của user, nhưng khi mình định sửa thông tin của user như mình đang hơi phân vân không biết nên dùng phương án nào: 1) dùng setQueryData rồi nhận giá trị thay đổi bằng onChange, edit dữ liệu rồi tiến hành update hay là 2) dùng useQuery để nhận thông tin user và đẩy lên redux-toolkit sau đó dùng dispatch để quản lý trạng thái rồi chạy edit api sau?
Đá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
Chào bạn, Bạn cho mình hỏi lại mấy câu nhé, bạn kiểm tra lại thì mình mới giúp được - Bạn đang dùng đồng thời react-query và redux? - và đang nhận thông tin user từ server bằng useQuery của react-query - sau đó bạn quản lý thông tin nhận được tịa redux (đúng ko?) - Nếu thông tin user được sửa thì phải sửa nơi đang quản lý thông tin là redux hoặc react-query gì đó, nhưng hiện tại bạn chưa biết làm thế nào? Đầu tiên thì bạn nên xem xét xem sẽ dùng react-query và redux để quản lý những giá trị state nào. Đọc câu hỏi thì mình cũng ko rõ tsao bạn cần chuyển thông tin user từ react-query xuống redux nữa. Theo mình chỉ cần dùng 1 trong 2 là ok ròi mà. data đc caching từ react-query rốt cuộc thì cũng dùng context api để quản lý nên cùng 1 data thì mình ko cần phải lưu tại 2 nơi. Nếu chỉ dùng react-query thôi thì mình có thể giải thích như sau, trường hợp value state là mutation thì có hàm useMutation trong react-query. Thông thường, khi mutation (sửa/xóa/tạo) thành công, nó sẽ invalidate (vô hiệu hóa) query key mà nó đang giữ. VD: bạn tại hook tên useUser(), bạn dùng useQuery hook, khi đó nếu query key là ["CURRENT_USER"], sau khi thực hiện mutation là updateUser() thì bạn gọi hàm queryClient.invalidateQueries({ queryKey: ["CURRENT_USER"] }) rồi làm useUser gửi yêu cầu lại đến server. Tuy nhiên nếu bạn viết cấu trúc thế này thì sẽ tốn thời gian đợi kết quả từ server, nên nếu UI yêu cầu phải phản ứng nhanh thì có thể sử dụng optimistic update và queryClient.setQueryData như bạn nói. Theo mình được biết thì setQueryData là hàm số được sử dụng khi cần trực tiếp sửa caching đang lưu tại queryClient. Tóm lại là: 1. useQuery có thể tải về data được. Lúc này react-query sẽ quản lý. 2. Để thay đổi data thì dùng useMutation để gửi yêu cầu thay đổi đến server. 3. Nếu thành công thì invalidate query key và dùng useQuery yêu cầu lại đến server. 4. Tuy nhiên, nếu UI phản ứng thay đổi ngay thì trong thời gian chờ server phản hồi, có thể sử dụng setQueryData để dựng optimistic update.
Đă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.