Skip to content

Conversation

@lifedraft
Copy link

@lifedraft lifedraft commented Jun 2, 2025

What:

Fix stack overflow error in React 19 caused by deepmerge attempting to merge children props. Fixes: #476

Why:

The library was crashing with "RangeError: Maximum call stack size exceeded" when used with Next.js 15 and React 19. This occurred because the WithStore HOC was trying to deepmerge this.props.children, which contains React elements with circular references that cause infinite recursion during the merge process.

How:

Modified the render() method in WithStore.jsx to extract children from props before passing the remaining props to deepMerge. The children are then passed directly to the wrapped component, avoiding the circular reference issue while maintaining the same functionality.

Checklist:

  • Documentation added/updated (N/A)
  • Typescript definitions updated (N/A)
  • Tests added and passing
  • Ready to be merged

@sk0le
Copy link

sk0le commented Sep 21, 2025

Any updates to this PR? I used this with an older version, we're migrating to the Next 15, so it would benefit us really much? I am more than happy to help with anything needed.

which-sam added a commit to whichdigital/pure-react-carousel that referenced this pull request Oct 30, 2025
- Add safeArrayMerge and safeMergeOptions to prevent circular references
- Update Store.jsx to use safeMergeOptions in deepMerge operations
- Fix WithStore.jsx to separate children props to avoid React 19 warnings
- Enhance Slider.jsx prop filtering to prevent DOM attribute warnings
- Update objectMerge.js to support custom merge functions and array merging
- Add comprehensive tests for safe merge functionality

Resolves React 19 stack overflow issues caused by deepmerging children props.
Implements changes from express-labs#485 for full React 19 support.

BREAKING CHANGE: None - maintains backward compatibility with React 15-18
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 this pull request may close these issues.

NextJS 15 incompatibility

2 participants