Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

How to mutate paginated cache for optimistic updates? #57

Closed
nishanBende opened this issue Nov 30, 2019 · 5 comments
Closed

How to mutate paginated cache for optimistic updates? #57

nishanBende opened this issue Nov 30, 2019 · 5 comments

Comments

@nishanBende
Copy link

I have a list of data and I am transforming it into a normalized form (Object instead of an array) in my fetcher passed in useQuery and while applying optimistic updates, I just replace the mutated data with the new one using setQueryData.

But when the list is paginated, I cannot find a proper/recommended way to make it work. Now, since the cache stored is in an array, I'll have to go through each page and find the record and replace it.

Is there a way to make it simpler?
Thanks

@tannerlinsley
Copy link
Collaborator

Could you give us an example of your code and what you're doing as of right now? That might help us out more.

@tannerlinsley
Copy link
Collaborator

As far as it stands today it is possible to mutate the results of a paginated query, and yes, you must manage all of the pages of that query atomically. I'm not sure of a better or more flexible way of doing this from the library's perspective.

Closing for now. Reopen with more info or suggestions if needed.

@nishanBende
Copy link
Author

@tannerlinsley I am sorry for the late response. I was stuck in a hectic schedule. I just got free this weekend.
I was refactoring some of our code to use react-query and had a great experience :D.
But I found it hard to do for paginated responses.

Our paginated list items need an optimistic update if any click happens in the listing.
(It's a react native application so we have multiple tabs mounted at the same time and each tab can have the same item and yes in different APIs 😅)

Using react-query, I'll have to check each item in the pages loop and do the update. (Obviously not an issue if the app is small, but our list can easily have like 100 or more items and updates can happen many times. It's like a feed app. e.g. FB/Instagram where you can like, react, etc.)

We can normalize the structure of a single page in query function but the paginated data will be stored in an array.

In apollo client, there is some control as it returns the fetchMoreResult and we can do some optimization of storing it using [key]:[value] instead of an array in cache.
https://www.apollographql.com/docs/react/data/pagination/#cursor-based

@tannerlinsley
Copy link
Collaborator

Hmm, I would love to see how you think a hypothetical API for this in React Query would look. That may give me a better idea of how to implement it with minimal overhead. What do you say?

@GaadMaiyaki
Copy link

Hi Tannerlinsley, I am currently working on a social media web app, that's paginated...
However, optimistically updating it seems impossible or too difficult, since it comes in the form of array in array...

Thanks.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants