suspensive
suspensive copied to clipboard
feat(react): Rename ErrorBoundary `onError` to `onCatch` (BREAKING CHANGE)
- [x] Rename
onErrorprop toonCatchin ErrorBoundary types (ErrorBoundaryProps) - [x] Update componentDidCatch to call
onCatchinstead ofonError - [x] Update all test files to use
onCatchinstead ofonError - [x] Update English documentation (en/docs/react/ErrorBoundary.mdx)
- [x] Update Korean documentation (ko/docs/react/ErrorBoundary.mdx)
- [x] ~~Update migration documentation (migrate-to-v2.mdx for both en and ko)~~ Reverted - v1-to-v2 migration docs should remain unchanged
- [x] Add migrate-to-v4 guide documenting the breaking change from
onErrortoonCatch(both English and Korean) - [x] Update visualization example file to use
onCatch - [x] Run tests to verify all changes work correctly
- [x] Build project to ensure no errors
- [x] Check for any other files that might reference onError
All changes have been successfully completed! The ErrorBoundary component now uses onCatch instead of onError as the prop name, which better aligns with the naming convention (matching shouldCatch and componentDidCatch).
Migration Guide
A comprehensive migrate-to-v4 guide has been added to help users transition from onError to onCatch. The guide includes:
- Clear explanation of the breaking change and its rationale
- Code examples showing the exact changes needed for both regular usage and
ErrorBoundary.withpattern - Available in both English and Korean
Note: The v1-to-v2 migration documentation has been kept unchanged as it documents historical migration from v1 to v2, not current v4 changes.
Fixes toss/suspensive#1783
Original prompt
This section details on the original issue you should resolve
<issue_title>[Feature]: ErrorBoundary onError -> onCatch (BREAKING CHANGE)</issue_title> <issue_description>### Package Scope
@suspensive/react
Description
If ErrorBoundary has shouldCatch and the React Component method has componentDidCatch, isn't it better to name onError as onCatch?
Callback passed by onError prop is only called when an Error caught by shouldCatch is caught. changing prop name is a breaking change, so I'm considering whether to reflect it in v4.
Possible Solution
No response
etc.
No response</issue_description>
<agent_instructions>This branch is for major versioning with BREAKING CHANGE</agent_instructions>
Comments on the Issue (you are @copilot in this section)
Fixes toss/suspensive#1783
💡 You can make Copilot smarter by setting up custom instructions, customizing its development environment and configuring Model Context Protocol (MCP) servers. Learn more Copilot coding agent tips in the docs.
⚠️ No Changeset found
Latest commit: 0818186b1b583ee8a560fcc435a60f0ae368a2d1
Merging this PR will not cause a version bump for any packages. If these changes should not result in a new version, you're good to go. If these changes should result in a version bump, you need to add a changeset.
This PR includes no changesets
When changesets are added to this PR, you'll see the packages that this PR includes changesets for and the associated semver types
Click here to learn what changesets are, and how to add one.
Click here if you're a maintainer who wants to add a changeset to this PR
The latest updates on your projects. Learn more about Vercel for GitHub.
| Project | Deployment | Preview | Comments | Updated (UTC) |
|---|---|---|---|---|
| v2.suspensive.org | Preview | Comment | Oct 15, 2025 6:26am | |
| v3.suspensive.org | Preview | Comment | Oct 15, 2025 6:26am | |
| visualization.suspensive.org | Preview | Comment | Oct 15, 2025 6:26am |
People can be co-author:
| Candidate | Reasons | Count | Add this as commit message |
|---|---|---|---|
| @Copilot | https://github.com/toss/suspensive/pull/1784#discussion_r2431191555 https://github.com/toss/suspensive/pull/1784#issuecomment-3404624025 https://github.com/toss/suspensive/pull/1784 | 3 | Co-authored-by: Copilot <[email protected]> |
| @manudeli | https://github.com/toss/suspensive/pull/1784#discussion_r2431180577 https://github.com/toss/suspensive/pull/1784#pullrequestreview-3338435059 https://github.com/toss/suspensive/pull/1784#issuecomment-3404616849 | 3 | Co-authored-by: manudeli <[email protected]> |
Size Change: -12 B (-0.01%)
Total Size: 80.2 kB
| Filename | Size | Change |
|---|---|---|
packages/react/dist/ErrorBoundary-********.js |
2.08 kB | -2 B (-0.1%) |
packages/react/dist/ErrorBoundary-********.cjs |
2.19 kB | -4 B (-0.18%) |
packages/react/dist/ErrorBoundary.cjs |
193 B | -1 B (-0.52%) |
packages/react/dist/ErrorBoundary.js |
174 B | -1 B (-0.57%) |
packages/react/dist/index.cjs |
458 B | -1 B (-0.22%) |
packages/react/dist/index.js |
391 B | -3 B (-0.76%) |
ℹ️ View Unchanged
| Filename | Size |
|---|---|
packages/jotai/dist/Atom-********.cjs |
383 B |
packages/jotai/dist/Atom-********.js |
265 B |
packages/jotai/dist/Atom.cjs |
93 B |
packages/jotai/dist/Atom.js |
80 B |
packages/jotai/dist/AtomValue-********.js |
241 B |
packages/jotai/dist/AtomValue-********.cjs |
375 B |
packages/jotai/dist/AtomValue.cjs |
99 B |
packages/jotai/dist/AtomValue.js |
85 B |
packages/jotai/dist/chunk-********.cjs |
542 B |
packages/jotai/dist/index.cjs |
151 B |
packages/jotai/dist/index.js |
125 B |
packages/jotai/dist/SetAtom-********.cjs |
368 B |
packages/jotai/dist/SetAtom-********.js |
239 B |
packages/jotai/dist/SetAtom.cjs |
97 B |
packages/jotai/dist/SetAtom.js |
83 B |
packages/react-dom/dist/FadeIn-********.js |
391 B |
packages/react-dom/dist/FadeIn-********.cjs |
506 B |
packages/react-dom/dist/FadeIn.cjs |
131 B |
packages/react-dom/dist/FadeIn.js |
116 B |
packages/react-dom/dist/index.cjs |
174 B |
packages/react-dom/dist/index.js |
146 B |
packages/react-dom/dist/InView-********.cjs |
747 B |
packages/react-dom/dist/InView-********.js |
664 B |
packages/react-dom/dist/InView.cjs |
113 B |
packages/react-dom/dist/InView.js |
99 B |
packages/react-dom/dist/useFadeIn-********.js |
425 B |
packages/react-dom/dist/useFadeIn-********.cjs |
512 B |
packages/react-dom/dist/useFadeIn.cjs |
122 B |
packages/react-dom/dist/useFadeIn.js |
107 B |
packages/react-dom/dist/useInView-********.cjs |
2.06 kB |
packages/react-dom/dist/useInView-********.js |
1.61 kB |
packages/react-dom/dist/useInView.cjs |
99 B |
packages/react-dom/dist/useInView.js |
85 B |
packages/react-native/dist/index.cjs |
98 B |
packages/react-native/dist/index.js |
84 B |
packages/react-native/dist/TestText-********.cjs |
707 B |
packages/react-native/dist/TestText-********.js |
211 B |
packages/react-native/dist/TestText.cjs |
98 B |
packages/react-native/dist/TestText.js |
84 B |
packages/react-query-4/dist/chunk-********.cjs |
542 B |
packages/react-query-4/dist/index.cjs |
522 B |
packages/react-query-4/dist/index.js |
439 B |
packages/react-query-4/dist/infiniteQueryOptions-********.js |
308 B |
packages/react-query-4/dist/infiniteQueryOptions-********.cjs |
431 B |
packages/react-query-4/dist/infiniteQueryOptions.cjs |
111 B |
packages/react-query-4/dist/infiniteQueryOptions.js |
96 B |
packages/react-query-4/dist/IsFetching-********.js |
268 B |
packages/react-query-4/dist/IsFetching-********.cjs |
408 B |
packages/react-query-4/dist/IsFetching.cjs |
100 B |
packages/react-query-4/dist/IsFetching.js |
86 B |
packages/react-query-4/dist/Mutation-********.cjs |
447 B |
packages/react-query-4/dist/Mutation-********.js |
314 B |
packages/react-query-4/dist/Mutation.cjs |
135 B |
packages/react-query-4/dist/Mutation.js |
120 B |
packages/react-query-4/dist/mutationOptions-********.js |
153 B |
packages/react-query-4/dist/mutationOptions-********.cjs |
210 B |
packages/react-query-4/dist/mutationOptions.cjs |
103 B |
packages/react-query-4/dist/mutationOptions.js |
89 B |
packages/react-query-4/dist/objectWithoutProperties-********.js |
370 B |
packages/react-query-4/dist/objectWithoutProperties-********.cjs |
413 B |
packages/react-query-4/dist/PrefetchInfiniteQuery-********.js |
408 B |
packages/react-query-4/dist/PrefetchInfiniteQuery-********.cjs |
521 B |
packages/react-query-4/dist/PrefetchInfiniteQuery.cjs |
131 B |
packages/react-query-4/dist/PrefetchInfiniteQuery.js |
115 B |
packages/react-query-4/dist/PrefetchQuery-********.js |
396 B |
packages/react-query-4/dist/PrefetchQuery-********.cjs |
513 B |
packages/react-query-4/dist/PrefetchQuery.cjs |
122 B |
packages/react-query-4/dist/PrefetchQuery.js |
105 B |
packages/react-query-4/dist/QueryClientConsumer-********.cjs |
422 B |
packages/react-query-4/dist/QueryClientConsumer-********.js |
283 B |
packages/react-query-4/dist/QueryClientConsumer.cjs |
107 B |
packages/react-query-4/dist/QueryClientConsumer.js |
92 B |
packages/react-query-4/dist/queryOptions-********.cjs |
424 B |
packages/react-query-4/dist/queryOptions-********.js |
304 B |
packages/react-query-4/dist/queryOptions.cjs |
102 B |
packages/react-query-4/dist/queryOptions.js |
88 B |
packages/react-query-4/dist/SuspenseInfiniteQuery-********.cjs |
708 B |
packages/react-query-4/dist/SuspenseInfiniteQuery-********.js |
563 B |
packages/react-query-4/dist/SuspenseInfiniteQuery.cjs |
147 B |
packages/react-query-4/dist/SuspenseInfiniteQuery.js |
133 B |
packages/react-query-4/dist/SuspenseQueries-********.cjs |
636 B |
packages/react-query-4/dist/SuspenseQueries-********.js |
493 B |
packages/react-query-4/dist/SuspenseQueries.cjs |
105 B |
packages/react-query-4/dist/SuspenseQueries.js |
91 B |
packages/react-query-4/dist/SuspenseQuery-********.cjs |
690 B |
packages/react-query-4/dist/SuspenseQuery-********.js |
552 B |
packages/react-query-4/dist/SuspenseQuery.cjs |
140 B |
packages/react-query-4/dist/SuspenseQuery.js |
125 B |
packages/react-query-4/dist/usePrefetchInfiniteQuery-********.js |
404 B |
packages/react-query-4/dist/usePrefetchInfiniteQuery-********.cjs |
518 B |
packages/react-query-4/dist/usePrefetchInfiniteQuery.cjs |
115 B |
packages/react-query-4/dist/usePrefetchInfiniteQuery.js |
100 B |
packages/react-query-4/dist/usePrefetchQuery-********.js |
395 B |
packages/react-query-4/dist/usePrefetchQuery-********.cjs |
513 B |
packages/react-query-4/dist/usePrefetchQuery.cjs |
106 B |
packages/react-query-4/dist/usePrefetchQuery.js |
92 B |
packages/react-query-4/dist/useSuspenseInfiniteQuery-********.cjs |
438 B |
packages/react-query-4/dist/useSuspenseInfiniteQuery-********.js |
313 B |
packages/react-query-4/dist/useSuspenseInfiniteQuery.cjs |
115 B |
packages/react-query-4/dist/useSuspenseInfiniteQuery.js |
100 B |
packages/react-query-4/dist/useSuspenseQueries-********.js |
307 B |
packages/react-query-4/dist/useSuspenseQueries-********.cjs |
432 B |
packages/react-query-4/dist/useSuspenseQueries.cjs |
109 B |
packages/react-query-4/dist/useSuspenseQueries.js |
94 B |
packages/react-query-4/dist/useSuspenseQuery-********.js |
305 B |
packages/react-query-4/dist/useSuspenseQuery-********.cjs |
431 B |
packages/react-query-4/dist/useSuspenseQuery.cjs |
106 B |
packages/react-query-4/dist/useSuspenseQuery.js |
92 B |
packages/react-query-5/dist/chunk-********.cjs |
542 B |
packages/react-query-5/dist/index.cjs |
519 B |
packages/react-query-5/dist/index.js |
429 B |
packages/react-query-5/dist/infiniteQueryOptions-********.js |
303 B |
packages/react-query-5/dist/infiniteQueryOptions-********.cjs |
427 B |
packages/react-query-5/dist/infiniteQueryOptions.cjs |
111 B |
packages/react-query-5/dist/infiniteQueryOptions.js |
96 B |
packages/react-query-5/dist/IsFetching-********.js |
349 B |
packages/react-query-5/dist/IsFetching-********.cjs |
484 B |
packages/react-query-5/dist/IsFetching.cjs |
137 B |
packages/react-query-5/dist/IsFetching.js |
122 B |
packages/react-query-5/dist/Mutation-********.cjs |
445 B |
packages/react-query-5/dist/Mutation-********.js |
313 B |
packages/react-query-5/dist/Mutation.cjs |
135 B |
packages/react-query-5/dist/Mutation.js |
120 B |
packages/react-query-5/dist/mutationOptions-********.cjs |
423 B |
packages/react-query-5/dist/mutationOptions-********.js |
302 B |
packages/react-query-5/dist/mutationOptions.cjs |
103 B |
packages/react-query-5/dist/mutationOptions.js |
89 B |
packages/react-query-5/dist/objectWithoutProperties-********.cjs |
413 B |
packages/react-query-5/dist/objectWithoutProperties-********.js |
370 B |
packages/react-query-5/dist/PrefetchInfiniteQuery-********.js |
399 B |
packages/react-query-5/dist/PrefetchInfiniteQuery-********.cjs |
536 B |
packages/react-query-5/dist/PrefetchInfiniteQuery.cjs |
112 B |
packages/react-query-5/dist/PrefetchInfiniteQuery.js |
97 B |
packages/react-query-5/dist/PrefetchQuery-********.cjs |
529 B |
packages/react-query-5/dist/PrefetchQuery-********.js |
390 B |
packages/react-query-5/dist/PrefetchQuery.cjs |
103 B |
packages/react-query-5/dist/PrefetchQuery.js |
89 B |
packages/react-query-5/dist/QueryClientConsumer-********.cjs |
423 B |
packages/react-query-5/dist/QueryClientConsumer-********.js |
284 B |
packages/react-query-5/dist/QueryClientConsumer.cjs |
107 B |
packages/react-query-5/dist/QueryClientConsumer.js |
92 B |
packages/react-query-5/dist/queryOptions-********.cjs |
421 B |
packages/react-query-5/dist/queryOptions-********.js |
297 B |
packages/react-query-5/dist/queryOptions.cjs |
102 B |
packages/react-query-5/dist/queryOptions.js |
88 B |
packages/react-query-5/dist/SuspenseInfiniteQuery-********.js |
562 B |
packages/react-query-5/dist/SuspenseInfiniteQuery-********.cjs |
709 B |
packages/react-query-5/dist/SuspenseInfiniteQuery.cjs |
148 B |
packages/react-query-5/dist/SuspenseInfiniteQuery.js |
133 B |
packages/react-query-5/dist/SuspenseQueries-********.cjs |
652 B |
packages/react-query-5/dist/SuspenseQueries-********.js |
506 B |
packages/react-query-5/dist/SuspenseQueries.cjs |
105 B |
packages/react-query-5/dist/SuspenseQueries.js |
91 B |
packages/react-query-5/dist/SuspenseQuery-********.cjs |
687 B |
packages/react-query-5/dist/SuspenseQuery-********.js |
540 B |
packages/react-query-5/dist/SuspenseQuery.cjs |
141 B |
packages/react-query-5/dist/SuspenseQuery.js |
125 B |
packages/react-query-5/dist/usePrefetchInfiniteQuery-********.js |
307 B |
packages/react-query-5/dist/usePrefetchInfiniteQuery-********.cjs |
433 B |
packages/react-query-5/dist/usePrefetchInfiniteQuery.cjs |
115 B |
packages/react-query-5/dist/usePrefetchInfiniteQuery.js |
100 B |
packages/react-query-5/dist/usePrefetchQuery-********.cjs |
424 B |
packages/react-query-5/dist/usePrefetchQuery-********.js |
302 B |
packages/react-query-5/dist/usePrefetchQuery.cjs |
106 B |
packages/react-query-5/dist/usePrefetchQuery.js |
92 B |
packages/react-query-5/dist/useSuspenseInfiniteQuery-********.js |
307 B |
packages/react-query-5/dist/useSuspenseInfiniteQuery-********.cjs |
428 B |
packages/react-query-5/dist/useSuspenseInfiniteQuery.cjs |
115 B |
packages/react-query-5/dist/useSuspenseInfiniteQuery.js |
100 B |
packages/react-query-5/dist/useSuspenseQueries-********.js |
301 B |
packages/react-query-5/dist/useSuspenseQueries-********.cjs |
424 B |
packages/react-query-5/dist/useSuspenseQueries.cjs |
109 B |
packages/react-query-5/dist/useSuspenseQueries.js |
94 B |
packages/react-query-5/dist/useSuspenseQuery-********.cjs |
423 B |
packages/react-query-5/dist/useSuspenseQuery-********.js |
298 B |
packages/react-query-5/dist/useSuspenseQuery.cjs |
106 B |
packages/react-query-5/dist/useSuspenseQuery.js |
92 B |
packages/react-query/dist/chunk-********.cjs |
542 B |
packages/react-query/dist/index.cjs |
381 B |
packages/react-query/dist/index.js |
190 B |
packages/react-query/dist/v4.cjs |
381 B |
packages/react-query/dist/v4.js |
190 B |
packages/react-query/dist/v5.cjs |
381 B |
packages/react-query/dist/v5.js |
190 B |
packages/react/dist/chunk-********.cjs |
542 B |
packages/react/dist/ClientOnly-********.js |
529 B |
packages/react/dist/ClientOnly-********.cjs |
645 B |
packages/react/dist/ClientOnly.cjs |
159 B |
packages/react/dist/ClientOnly.js |
142 B |
packages/react/dist/DefaultProps-********.cjs |
1.03 kB |
packages/react/dist/DefaultProps-********.js |
919 B |
packages/react/dist/DefaultProps.cjs |
163 B |
packages/react/dist/DefaultProps.js |
147 B |
packages/react/dist/DefaultPropsContexts-********.cjs |
372 B |
packages/react/dist/DefaultPropsContexts-********.js |
250 B |
packages/react/dist/Delay-********.js |
1.02 kB |
packages/react/dist/Delay-********.cjs |
1.13 kB |
packages/react/dist/Delay.cjs |
179 B |
packages/react/dist/Delay.js |
161 B |
packages/react/dist/ErrorBoundaryGroup-********.cjs |
1.23 kB |
packages/react/dist/ErrorBoundaryGroup-********.js |
1.1 kB |
packages/react/dist/ErrorBoundaryGroup.cjs |
182 B |
packages/react/dist/ErrorBoundaryGroup.js |
161 B |
packages/react/dist/lazy-********.js |
1.98 kB |
packages/react/dist/lazy-********.cjs |
2.1 kB |
packages/react/dist/lazy.cjs |
191 B |
packages/react/dist/lazy.js |
171 B |
packages/react/dist/noop-********.js |
138 B |
packages/react/dist/noop-********.cjs |
201 B |
packages/react/dist/objectSpread2-********.js |
771 B |
packages/react/dist/objectSpread2-********.cjs |
807 B |
packages/react/dist/objectWithoutProperties-********.js |
370 B |
packages/react/dist/objectWithoutProperties-********.cjs |
413 B |
packages/react/dist/Suspense-********.cjs |
950 B |
packages/react/dist/Suspense-********.js |
829 B |
packages/react/dist/Suspense.cjs |
226 B |
packages/react/dist/Suspense.js |
207 B |
packages/react/dist/SuspensiveError-********.cjs |
518 B |
packages/react/dist/SuspensiveError-********.js |
428 B |
packages/react/dist/useIsClient-********.cjs |
350 B |
packages/react/dist/useIsClient-********.js |
243 B |
packages/react/dist/useIsClient.cjs |
117 B |
packages/react/dist/useIsClient.js |
101 B |
@copilot @suspensive/react's migration guide is needed. you can check other migration guide. make it simillar
@copilot
@suspensive/react's migration guide is needed. you can check other migration guide. make it simillar
Created migrate-to-v4 migration guides for both English and Korean following the same format as other migration guides. The guides document the onError to onCatch breaking change with clear migration examples. (commit 95e6c1d)