Skip to content

Conversation

@MatiPl01
Copy link
Owner

@MatiPl01 MatiPl01 commented Sep 8, 2025

Description

This PR improves a few following things:

  • optimizes renders by memoizing callbacks before passing them to the memoized inner sortable component
  • cleans up the drag state management in the drag provider,
  • adds delay in the linear transition layout animation in the collapsibe example so that items' heights animate more in sync with the position change than before

@MatiPl01 MatiPl01 self-assigned this Sep 8, 2025
@MatiPl01 MatiPl01 added enhancement New feature or request fix labels Sep 8, 2025
@vercel
Copy link

vercel bot commented Sep 8, 2025

The latest updates on your projects. Learn more about Vercel for GitHub.

1 Skipped Deployment
Project Deployment Preview Comments Updated (UTC)
react-native-sortables-docs Ignored Ignored Sep 8, 2025 10:56am

@MatiPl01 MatiPl01 changed the title fix: Uunnecessary rerenders with inlined callbacks, drag state management cleanup fix: Unnecessary rerenders with inlined callbacks, drag state management cleanup Sep 8, 2025
@MatiPl01 MatiPl01 changed the title fix: Unnecessary rerenders with inlined callbacks, drag state management cleanup perf: Optimize rerenders caused by inlined callbacks, drag state management cleanup Sep 8, 2025
@MatiPl01 MatiPl01 changed the title perf: Optimize rerenders caused by inlined callbacks, drag state management cleanup perf: Optimize rerenders caused by inlined callbacks, clean up drag state management Sep 8, 2025
@MatiPl01 MatiPl01 requested a review from Copilot September 8, 2025 10:59
@MatiPl01 MatiPl01 added performance and removed fix labels Sep 8, 2025
Copy link
Contributor

Copilot AI left a 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 useStableCallbackValues to prevent re-renders in SortableGrid and SortableFlex
  • Consolidates scattered drag state variables into a single context object in DragProvider
  • 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.

@MatiPl01 MatiPl01 merged commit f5e3c89 into main Sep 8, 2025
10 checks passed
@MatiPl01 MatiPl01 deleted the fix/unnecessary-rerenders-with-inlined-callbacks branch September 8, 2025 11:01
MatiPl01 pushed a commit that referenced this pull request Sep 13, 2025
# [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))
@MatiPl01
Copy link
Owner Author

🎉 This issue has been resolved in version 1.9.0 🎉

The release is available on:

Your semantic-release bot 📦🚀

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants