Skip to content

Conversation

@keisuke-na
Copy link

@keisuke-na keisuke-na commented Oct 1, 2025

Summary

This PR adds React 19 compatibility by replacing the deprecated defaultProps pattern with ES6 default parameters and useMemo
hooks.

Changes

  • Remove ReactWordCloud.defaultProps (deprecated in React 19)
  • Add DEFAULT_MIN_SIZE constant to prevent reference issues
  • Use useMemo for minSize and svgAttributes to maintain stable references
  • Move mergedCallbacks and mergedOptions into useEffect
  • Update useEffect dependencies (exclude size to prevent infinite loops)
  • Add explanatory comment for eslint-disable-next-line

Technical Details

  • React 19 ignores defaultProps on function components
  • Default parameter arrays create new references on each render
  • Module-level constants ensure stable references for useMemo
  • size excluded from dependencies as it's managed by useResponsiveSvgSelection and including it could cause infinite
    re-render loops

Testing

Tested with React 19.1.1 and verified basic wordcloud rendering works without infinite loops.

Note

The pre-push hook fails due to TypeScript errors in node_modules/@types/* files. This appears to be an existing issue with the
TypeScript version (3.8.3) and newer type definitions.

…ters

This commit adds React 19 compatibility by replacing the deprecated
defaultProps pattern with ES6 default parameters and useMemo hooks.

Changes:
- Remove ReactWordCloud.defaultProps (deprecated in React 19)
- Add DEFAULT_MIN_SIZE constant to prevent reference issues
- Use useMemo for minSize and svgAttributes to maintain stable references
- Move mergedCallbacks and mergedOptions into useEffect
- Update useEffect dependencies (exclude 'size' to prevent infinite loops)
- Add explanatory comment for eslint-disable-next-line

Technical details:
- React 19 ignores defaultProps on function components
- Default parameter arrays create new references on each render
- Module-level constants ensure stable references for useMemo
- 'size' excluded from dependencies as it's managed by useResponsiveSvgSelection
  and including it could cause infinite re-render loops

Tested with React 19.1.1
- Upgrade TypeScript from 3.8.3 to 5.0.0
- Add @types/react and @types/react-dom for better type safety
- Update tsconfig.json with skipLibCheck and strict: false
- Fix type errors in hooks.js with proper null checks
- Add @ts-ignore comments for TypeScript type inference issues

This resolves the build errors that were occurring with outdated
TypeScript version and newer type definition packages.
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.

1 participant