Conversation
|
The latest updates on your projects. Learn more about Vercel for Git ↗︎ 1 Skipped Deployment
|
There was a problem hiding this comment.
Pull Request Overview
This PR optimizes item reordering performance in sortable components by implementing architecture-specific positioning strategies. It addresses performance issues in the New Architecture (Fabric) where layout changes trigger excessive onLayout callbacks.
- Introduces separate positioning logic for Paper (old architecture) vs Fabric (new architecture)
- Implements hybrid positioning approach for Fabric using transforms during animations and layout props otherwise
- Adds architecture detection utility to determine runtime behavior
Reviewed Changes
Copilot reviewed 2 out of 2 changed files in this pull request and generated 3 comments.
| File | Description |
|---|---|
| packages/react-native-sortables/src/providers/shared/hooks/useItemStyles.ts | Refactors item positioning logic into architecture-specific functions with performance optimizations |
| packages/react-native-sortables/src/constants/platform.ts | Adds Fabric architecture detection function |
| return isFabric() || IS_WEB | ||
| ? // eslint-disable-next-line react-hooks/rules-of-hooks | ||
| useItemStylesFabric(position, layoutPosition, decoration, zIndex) | ||
| : // eslint-disable-next-line react-hooks/rules-of-hooks |
There was a problem hiding this comment.
Conditionally calling hooks violates the Rules of Hooks. Consider restructuring to always call the same hooks in the same order, perhaps by moving the conditional logic inside the hook implementations.
# [1.8.0](v1.7.1...v1.8.0) (2025-07-29) ### Bug Fixes * Allow disabling default layer provider ([#424](#424)) ([ded5c92](ded5c92)), closes [#417](#417) [#36877](https://github.com/MatiPl01/react-native-sortables/issues/36877) * Buggy grid swapping in some edge cases ([#414](#414)) ([3617f86](3617f86)) * DragProvider drag end index assignment ([#411](#411)) ([69ad8a6](69ad8a6)) * Hiding of the sortable item when teleported ([#436](#436)) ([4c3796f](4c3796f)) * Invalid flex container height on initial render and other small issues ([#437](#437)) ([48e905b](48e905b)) * Invalid ScrollView position on input focus ([#431](#431)) ([2693234](2693234)), closes [#ef4444](https://github.com/MatiPl01/react-native-sortables/issues/ef4444) * Long drop duration reordering issues ([#406](#406)) ([ace7037](ace7037)) * Multiple minor improvements ([#439](#439)) ([f9d83e3](f9d83e3)) * Paper flickering and positioning issues ([#426](#426)) ([744e291](744e291)) * Teleported active item flickering ([#405](#405)) ([1413af2](1413af2)) ### Features * Base multi zone provider ([#409](#409)) ([56f0ef3](56f0ef3)) * Base zone with event callbacks ([#413](#413)) ([e51ca61](e51ca61)) * Fixed items support in sortable flex ([#416](#416)) ([1d23fcc](1d23fcc)), closes [#374](#374) * Max overscroll settings ([#423](#423)) ([167dc4e](167dc4e)), closes [#419](#419) * Separate controlled item dimensions from measured dimensions ([#433](#433)) ([cad95e5](cad95e5)) ### Performance Improvements * Merge item decoration styles with position styles ([#407](#407)) ([5066edd](5066edd)) * More performant items reordering ([#435](#435)) ([be78141](be78141)) * Reduce the number of unnecessary onLayout calls ([#434](#434)) ([ce56159](ce56159)), closes [#431](#431) * Replace useSharedValue with useMutableValue ([#408](#408)) ([6994c7a](6994c7a))
|
🎉 This issue has been resolved in version 1.8.0 🎉 The release is available on: Your semantic-release bot 📦🚀 |
Description
This PR implements more performant items reordering in sortable components that takes architectural differences into account (the
onLayoutcallback is called more often on the New Architecture if we use layout-based items positioning).