perf: Replace useSharedValue with useMutableValue#408
Merged
Conversation
|
The latest updates on your projects. Learn more about Vercel for Git ↗︎ 1 Skipped Deployment
|
Contributor
There was a problem hiding this comment.
Pull Request Overview
This PR refactors various components and hooks to replace the use of useSharedValue with a custom useMutableValue hook for lazy initialization and improved performance.
- Introduce
useMutableValuefor lazy creation of reanimated mutable values - Update
useAnimatedDebounceand other hooks/providers to useuseMutableValue - Remove all
useSharedValueimports and replace with the new hook
Reviewed Changes
Copilot reviewed 21 out of 21 changed files in this pull request and generated no comments.
| File | Description |
|---|---|
| packages/react-native-sortables/src/utils/reanimated/useMutableValue.ts | Adds useMutableValue with lazy initialization |
| packages/react-native-sortables/src/utils/reanimated/useAnimatedDebounce.ts | Switches from useSharedValue to useMutableValue |
| All provider, layout, hook, and component files | Replace useSharedValue imports/usage |
Comments suppressed due to low confidence (2)
packages/react-native-sortables/src/utils/reanimated/useMutableValue.ts:1
- [nitpick] Consider adding a JSDoc comment above
useMutableValueto explain its purpose, parameters, and return value, improving maintainability and discoverability.
import { useState } from 'react';
packages/react-native-sortables/src/utils/reanimated/useMutableValue.ts:1
- Add unit tests for
useMutableValueto verify that the mutable value is initialized only once and that updates to.valuepersist across renders.
import { useState } from 'react';
MatiPl01
pushed a commit
that referenced
this pull request
Jul 29, 2025
# [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))
Owner
Author
|
🎉 This issue has been resolved in version 1.8.0 🎉 The release is available on: Your semantic-release bot 📦🚀 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Description
This PR replaces all
useSharedValueusages withuseMutableValue.useSharedValueis heavier because of the cleanupuseEffectthat cancels currently running animation if there is any:I don't need this behavior as I never use infinite animations and, in most cases, don't use animations at all, rather update value by myself. I only use animations for items reordering and the drop indicator, but since they are just short
withTiminganimations, the cleanup is not necessary. Even if the animation keeps running after the view was unmounted, it runs for a brief while, so there is no performance benefit in eager cleanup and it's better to reduce the number of unnecessaryuseEffecthooks.