-
Notifications
You must be signed in to change notification settings - Fork 20
perf: Optimize rerenders caused by inlined callbacks, clean up drag state management #474
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
perf: Optimize rerenders caused by inlined callbacks, clean up drag state management #474
Conversation
|
The latest updates on your projects. Learn more about Vercel for GitHub. 1 Skipped Deployment
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Pull Request Overview
This PR optimizes performance by memoizing callbacks to reduce unnecessary re-renders and consolidates drag state management into a single context object to improve maintainability. It also includes a minor improvement to the collapsible example's animation timing.
- Memoizes callbacks with
useStableCallbackValuesto prevent re-renders inSortableGridandSortableFlex - Consolidates scattered drag state variables into a single
contextobject inDragProvider - Adds early return for zero distance scrolls and improves animation timing in example
Reviewed Changes
Copilot reviewed 7 out of 7 changed files in this pull request and generated 2 comments.
Show a summary per file
| File | Description |
|---|---|
| packages/react-native-sortables/src/providers/shared/DragProvider.ts | Consolidates drag state management into single context object and removes individual stable callback wrappers |
| packages/react-native-sortables/src/providers/shared/AutoScrollProvider/AutoScrollProvider.tsx | Adds early return optimization for zero distance scrolls |
| packages/react-native-sortables/src/integrations/reanimated/hooks/useStableCallbackValues.ts | New hook for memoizing multiple callbacks at once |
| packages/react-native-sortables/src/integrations/reanimated/hooks/index.ts | Exports the new useStableCallbackValues hook |
| packages/react-native-sortables/src/components/SortableGrid.tsx | Uses memoized callbacks to optimize renders |
| packages/react-native-sortables/src/components/SortableFlex.tsx | Uses memoized callbacks to optimize renders |
| example/app/src/examples/SortableGrid/miscellaneous/CollapsibleItemsExample.tsx | Improves animation timing with conditional delay and removes debug logs |
Tip: Customize your code reviews with copilot-instructions.md. Create the file or learn how to get started.
packages/react-native-sortables/src/integrations/reanimated/hooks/useStableCallbackValues.ts
Show resolved
Hide resolved
# [1.9.0](v1.8.0...v1.9.0) (2025-09-13) ### Bug Fixes * A bunch of issues, like shaky scroll, invalid grid layout, added items flickering ([#463](#463)) ([3b160b6](3b160b6)) * Active item touch start position on Android ([#462](#462)) ([7704729](7704729)) * Autoscroll exceeding bounds ([#473](#473)) ([eddd21b](eddd21b)) * Collapsible items implementation on the web ([#485](#485)) ([4d261db](4d261db)) * Collapsible items shift when size changes ([#451](#451)) ([e816b6a](e816b6a)) * Incorrect drag start position, no item size animation when teleported ([#456](#456)) ([1730fb8](1730fb8)) * Invalid builder bob config ([#475](#475)) ([11cf84a](11cf84a)) * Invalid grid layout on mount ([#461](#461)) ([a47ed72](a47ed72)) * onActiveItemDropped not being fired when item is touched quickly ([#449](#449)) ([f66d980](f66d980)) * Pre-release fixes and improvements ([#476](#476)) ([736fb7b](736fb7b)) * Prevent auto scroll from over scrolling content container ([#484](#484)) ([db586d7](db586d7)), closes [#473](#473) ### Features * Add custom shadow example to docs, clean up decoration style ([#466](#466)) ([1169928](1169928)) * Add example app build check CIs ([#480](#480)) ([5ad420c](5ad420c)) * Add style property to the handle component ([#477](#477)) ([28c9099](28c9099)) * Better collapsible auto-scroll behavior ([#457](#457)) ([2d24b14](2d24b14)), closes [#444](#444) * Collapsible items support ([#444](#444)) ([66c03b6](66c03b6)) * Data provider ([#472](#472)) ([5dc34b6](5dc34b6)) * Improved teleported items behavior ([#452](#452)) ([72dadef](72dadef)) * Make layout update in sync with positions change on grid columns change ([#441](#441)) ([ef37d8c](ef37d8c)) * New auto scroll implementation ([#454](#454)) ([c4facec](c4facec)), closes [#285](#285) [#453](#453) [#285](#285) ### Performance Improvements * Optimize rerenders caused by inlined callbacks, clean up drag state management ([#474](#474)) ([f5e3c89](f5e3c89)) * Reduce the number of layout calculations ([#442](#442)) ([f9c9875](f9c9875))
|
🎉 This issue has been resolved in version 1.9.0 🎉 The release is available on: Your semantic-release bot 📦🚀 |
Description
This PR improves a few following things: