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

feat: add reset error boundary component #980

Merged
merged 1 commit into from
Sep 11, 2020

Conversation

boschni
Copy link
Collaborator

@boschni boschni commented Sep 7, 2020

Because error boundaries are only applicable to a certain a tree, I think it would be good if the error reset would also only be applicable to that specific tree.

The ReactQueryResetErrorBoundary component enables this functionality, while allowing users to keep their own error boundary component. This does mean users will need to wrap their queries in two boundaries. We could streamline this by providing a ReactQueryErrorBoundary component similar to react-error-boundary. But maybe there are arguments against this?

This change should be backwards compatible and would allow us to remove queryCache.resetErrorBoundaries() and query.state.throwInErrorBoundary in v3 to make the core less knowledgable about React.

@vercel
Copy link

vercel bot commented Sep 7, 2020

This pull request is being automatically deployed with Vercel (learn more).
To see the status of your deployment, click below or on the icon next to each commit.

🔍 Inspect: https://vercel.com/tannerlinsley/react-query/8aildygxh
✅ Preview: https://react-query-git-fork-boschni-feature-error-boundary.tannerlinsley.vercel.app

@tannerlinsley
Copy link
Collaborator

Conflicts ;)

@boschni
Copy link
Collaborator Author

boschni commented Sep 8, 2020

Ah yes will resolve those. What is your thought on a ‘ReactQueryErrorBoundary’ vs ‘ReactQueryResetErrorBoundary’?

@tannerlinsley
Copy link
Collaborator

So I think my main argument against what's happening here is that React Query isn't an error boundary component and by providing one would be diverging from the ecosystem (most people just use react-error-boundary or have their own. I 100% agree that people want to capture/reset errors for specific parts of their app, but doesn't that just mean that they will use multiple instances of their chosen error boundary component?

That said... we would need a reliable way to know which queries to reset for a specific tree... so thus, we need a wrapper component 😂

All that said, I think we should totally ship a component, but do as much as we can to show people how to reliably integrate it with a real error boundary component.

And that brings me to the name. It's not really an error boundary. It's a query resetter. So maybe something like ReactQueryResetBoundary?

@boschni boschni changed the title WIP: feat: add reset error boundary component feat: add reset error boundary component Sep 9, 2020
@boschni
Copy link
Collaborator Author

boschni commented Sep 9, 2020

Fair enough! Users can always create their own error boundary wrapper which also includes a react query error reset boundary :)

@tannerlinsley tannerlinsley merged commit 93db5b6 into TanStack:master Sep 11, 2020
@tannerlinsley
Copy link
Collaborator

🎉 This PR is included in version 2.16.0 🎉

The release is available on:

Your semantic-release bot 📦🚀

@kentcdodds
Copy link
Member

kentcdodds commented Sep 17, 2020

This busted https://github.com/kentcdodds/bookshelf

Here's the PR upgrading to this version of react-query@2.16.0: kentcdodds/bookshelf#69

Note that the latest version is broken as well. This is just the first version that triggered an issue.

Let me know if you'd like me to open a new issue about this regression.

@boschni
Copy link
Collaborator Author

boschni commented Sep 18, 2020

@kentcdodds the functionality seems to work in the app itself and the tests pass if I disable the "can edit a note" test. Could there be a race condition in the tests?

@kentcdodds
Copy link
Member

Indeed. I thought I could reproduce it in the app but turns out that's not the case. It's tests only. I'm going to investigate and even better I'll try to reproduce this in react-query's tests so we avoid breakages like this in the future :)

ryands17 added a commit to ryands17/react-query that referenced this pull request Sep 21, 2020
* docs: added more detailed explanation of what the cache timeout does in the detailed walkthough of useQuery (TanStack#928)

Co-authored-by: Clayton Marshall <claytn@claytons-mbp.lan>

* Update index.js

* Add queryCache de/rehydration (TanStack#728)

* chore(hydration): set up separate hydration entry point

* feat(hydration): add support for de/rehydrating queryCaches

- Add dehydrate(queryCache, config)
- Add hydrate(queryCache, dehydratedQueries, config)
- Add useHydrate(dehydratedQueries, config)

* test(hydration): fix broken type in test

* rename scheduleTimeoutsManually to activateTimeoutsManually

* docs(hydration): add API-docs for hydration and update comparison

* docs(ssr): update ssr-docs with new approach based on de/rehydration

* remove activateTimeoutsManually

* add default shouldDehydrate

* add hydration/ReactQueryCacheProvider

* use unknown for initialData in dehydration

* rename initialQueries  and dehydratedQueries to dehydratedState

* include queryKey instead of queryHash in dehydration

* update initialQueries to dehydratedState in ssr guide docs

* remove shouldHydrate-option

* feat: determine staleness locally instead of globally (TanStack#933)

* fix: add hydration.js to npm files

* fix: add hydration.js to npm files

* fix: make sure initial data is used when switching queries (TanStack#944)

* feat: change ReactQueryCacheProvider from hydration to Hydrate (TanStack#943)

* tests: fix setTimeout for ci tests

* fix: always use config from last query execution (TanStack#942)

* fix: make sure queries with only inactive observers are also invalidated (TanStack#949)

* feat: add notifyOnStatusChange flag (TanStack#840)

* docs: update comparison

Closes TanStack#920

* docs: update supporters and comparison

* docs: fix sponsors rendering

* fix: ignore errors from background fetches (TanStack#953)

* feat: add forceFetchOnMount flag (TanStack#954)

* feat: add isPreviousData and isFetchedAfterMount flags (TanStack#961)

* docs(react-native): add solution for fullscreen error (TanStack#958)

* docs: update sponsors

* fix: use hook config on refocus or reconnect (TanStack#964)

* docs: typo in useQuery.test (TanStack#965)

* fix: make sure setQueryData is not considered as initial data (TanStack#966)

* refactor: cleanup to reduce file size and add tests (TanStack#969)

* Update devtools.md (TanStack#973)

Separate the sentences based on contex

* fix: export hydration types (TanStack#974)

* docs: update sponsors

* fix(hydration): overwrite the existing data in the cache if hydrated data is newer (TanStack#976)

* refactor: optimize render path and improve type safety (TanStack#984)

* feat: add reset error boundary component (TanStack#980)

* refactor: remove unused deepEqual function (TanStack#999)

* fix: cancel current fetch when fetching more (TanStack#1000)

* fix: notify query cache on stale (TanStack#1001)

* test: add previous data test (TanStack#1003)

* feat: add support for tree shaking (TanStack#994)

* fix: useInfinityQuery fetchMore should not throw (TanStack#1004)

* docs: update api docs (TanStack#1005)

* refactor: remove query status bools (TanStack#1009)

* fix: make sure initial data always uses initial stale (TanStack#1010)

* feat: add always option to refetch options (TanStack#1011)

* feat: export QueryCache and remove global query cache from docs and examples (TanStack#1017)

* docs: remove shared config (TanStack#1021)

* feat: add remove method and deprecate clear (TanStack#1022)

* fix: should be able to invalidate queries (TanStack#1006)

* fix: should throw error when using useErrorBoundary (TanStack#1016)

* docs: Add graphql docs

* docs: add graphql-request example

* docs: update graphql docs

* docs: add graphql example

* feat: implement batch rendering (TanStack#989)

* docs: Update comparison.md

* docs: Update essentials banner

* docs: reorder homepage

* fix: accept any promise in useMutation callbacks (TanStack#1033)

* docs: prefer default config of QueryCache (TanStack#1034)

* fix: include config callbacks in batch render (TanStack#1036)

* docs: update example deps

* docs: fix comparison 3rd party website links (TanStack#1040)

* Remove storing the return value of queryCache.removeQueries (TanStack#1038)

Removed storing the return value of `queryCache.removeQueries` as it doesn't return anything.

* feat: add QueryCache.fetchQuery method (TanStack#1041)

* docs: add refetch documentation (TanStack#1043)

* docs: fix graphql example link

Closes TanStack#1044

* docs: remove trailing quotes from supporters links (TanStack#1045)

The quotes were breaking the links.

* docs: fix typo in queries page (TanStack#1046)

* fix: prevent bundlers from removing side effects (TanStack#1048)

* test: add invalidate query tests (TanStack#1052)

* fix: query should try and throw again after error boundary reset (TanStack#1054)

* docs: fix `user.id` access in case user is null (TanStack#1056)

* docs: update comparison

* docs: update sponsors

* feat: add QueryCache.watchQuery (TanStack#1058)

* docs: Update invalidations-from-mutations.md (TanStack#1057)

Remove unnecessary parenthesis

Co-authored-by: Clayton Marshall <c.marshall@salesforce.com>
Co-authored-by: Clayton Marshall <claytn@claytons-mbp.lan>
Co-authored-by: Tanner Linsley <tannerlinsley@gmail.com>
Co-authored-by: Fredrik Höglund <fredrik.hoglund@gmail.com>
Co-authored-by: Niek Bosch <just.niek@gmail.com>
Co-authored-by: Dragoș Străinu <str.dr4605@gmail.com>
Co-authored-by: Alex Marshall <alex.k.marshall83@gmail.com>
Co-authored-by: Rudzainy Rahman <rudzainy@gmail.com>
Co-authored-by: Corentin Leruth <corentin.leruth@gmail.com>
Co-authored-by: Evgeniy Boreyko <boreykojenya@yandex.ru>
Co-authored-by: Pierre Mdawar <pierre@mdawar.dev>
Co-authored-by: Juliano Farias <thefrontendwizard@gmail.com>
Co-authored-by: Twinkle <saintwinkle@gmail.com>
Co-authored-by: Julius-Rapp <61518032+Julius-Rapp@users.noreply.github.com>
Co-authored-by: cheddar <chad@cmfolio.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

3 participants