-
Notifications
You must be signed in to change notification settings - Fork 20
perf: Reduce the number of layout calculations #442
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
Conversation
|
The latest updates on your projects. Learn more about Vercel for Git ↗︎ 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 layout calculation performance by eliminating redundant computations and simplifying the layout provider APIs. The main focus is on removing the auto-workletized layout reactions that were causing multiple unnecessary recalculations.
- Removes custom hook-based layout calculation methods (
useGridLayoutanduseFlexLayoutReaction) that were causing performance issues - Consolidates layout calculations directly into main animated reactions to prevent multiple executions
- Introduces type definitions for
DimensionLimitsandPaddingsto improve code organization
Reviewed Changes
Copilot reviewed 6 out of 6 changed files in this pull request and generated 1 comment.
Show a summary per file
| File | Description |
|---|---|
| packages/react-native-sortables/src/types/providers/layout.ts | Removes unused layout calculation hook types from context interfaces |
| packages/react-native-sortables/src/types/layout/flex.ts | Extracts inline types into dedicated DimensionLimits and Paddings types |
| packages/react-native-sortables/src/providers/layout/grid/updates/common.ts | Replaces useGridLayout hook with direct useDerivedValue calculation |
| packages/react-native-sortables/src/providers/layout/grid/GridLayoutProvider.tsx | Consolidates layout calculation into main animated reaction, removing separate hook |
| packages/react-native-sortables/src/providers/layout/flex/updates/insert/index.ts | Replaces layout reaction hooks with direct calculateFlexLayout calls |
| packages/react-native-sortables/src/providers/layout/flex/FlexLayoutProvider.tsx | Merges layout calculation and update logic into single animated reaction |
packages/react-native-sortables/src/providers/layout/flex/FlexLayoutProvider.tsx
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 simplifies layout calculation logic for grid and flex components. It also optimizes the main layout calculation reaction which was previously improperly auto-workletized and ran sometimes 3 times instead of just once per layout change.