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

Solid Query: Query errors are not caught by ErrorBoundary in the same component #7083

Closed
PeterDraex opened this issue Mar 11, 2024 · 1 comment · Fixed by #7273
Closed

Solid Query: Query errors are not caught by ErrorBoundary in the same component #7083

PeterDraex opened this issue Mar 11, 2024 · 1 comment · Fixed by #7273

Comments

@PeterDraex
Copy link

PeterDraex commented Mar 11, 2024

Describe the bug

If the option throwOnError is true, Solid Query throws errors which can be caught with an ErrorBoundary. The issue is that the error doesn't get caught by the ErrorBoundary in the same component as where the query is defined, only by it's parent.

This leads to less readable code, because to properly catch errors, you need to .
It's also inconsistent with the behavior of SolidJS's Suspense and createResource.

Your minimal, reproducible example

https://stackblitz.com/edit/tanstack-query-urg3e7?file=src%2FExample.tsx

Steps to reproduce

  1. Open the link
  2. See that it shows "Parent ErrorBoundary was triggered 😢" while the expected result would be "Inner ErrorBoundary was triggered 🎉"

Expected behavior

If throwOnError is true, the ErrorBoundary defined within the same component is triggered (more specifically, the ErrorBoundary which is closes to the place where queryResult.data is accessed).

Tanstack Query adapter

solid-query 5.25.0

@ardeora
Copy link
Contributor

ardeora commented Apr 11, 2024

Taking a look at this this week!

ardeora added a commit that referenced this issue Apr 13, 2024
* feat(solid-query): Rework internals of createBaseQuery

This change aims to simplify and enhance the internals of `createBaseQuery`.
This change is a precursor to fix a couple of pressing issues in solid-query mentioned in
#7079 
#7083 
#7173 
#7036
#6620 
#6373
PRs for which are coming soon.

A key few highlights coming with this change:
1. Removal of `mutate` and `refetch` branches in `createClientSubscriber`: We had two different ways of resolving a query resource. The `mutate` option that optimistically updated a resource proved to be a problem with error queries. A query that has `placeholder` data and fails for any reason would see a flash of blank content before yielding to the ErrorBoundary. Using `refetch` for all query resolutions gives us a nice and simple way to transition to error boundaries
2. Removal of batched calls with `notifyManager`: With the new approach we dont need to batch anything. Everything is taken care of automatically. This removes all sideEffects from solid-query as a nice plus
3. Central place to update state: The new `setStateWithReconciliation` function provides a nice and easy way to make the `reconcile` option way more powerful
4. Only accessing the `data` property now would trigger Suspense boundary. Previously any property accessed on a query would trigger the suspense boundary. This was not intentional and has been fixed now
5. Proxied `data` doesn't jump between different values in most cases
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

Successfully merging a pull request may close this issue.

2 participants