import React , { useEffect } from 'react'
import { DndProvider , Draggable , DraggableGrid } from '@mgcrea/react-native-dnd'
import { Text , SafeAreaView , StyleSheet } from 'react-native'
const GRID_SIZE = 3
const items = [ '1' , '2' , '3' , '4' , '5' , '6' , '7' , '8' , '9' ]
export default function App ( ) {
const [ data , setData ] = React . useState ( [ ] )
const onOrderChange = order => {
const updatedItems = data . sort ( ( a , b ) => {
return order . indexOf ( a . id ) - order . indexOf ( b . id )
} )
setData ( updatedItems )
}
useEffect ( ( ) => {
setInterval ( ( ) => {
setData ( pr => [
...pr ,
{
id : `${ pr . length } -${ items [ pr . length ] } ` ,
value : items [ pr . length ] ,
} ,
] )
} , 2000 )
} , [ ] )
return (
< SafeAreaView style = { styles . container } >
< DndProvider >
< DraggableGrid
direction = "row"
size = { GRID_SIZE }
style = { styles . grid }
onOrderChange = { onOrderChange } >
{ data . map ( item => (
< Draggable key = { item . id } id = { item . id } style = { styles . draggable } >
< Text style = { styles . text } > { item . value } < / T e x t >
< / D r a g g a b l e >
) ) }
< / DraggableGrid >
< / D n d P r o v i d e r >
< / S a f e A r e a V i e w >
)
}
const LETTER_WIDTH = 100
const LETTER_HEIGHT = 100
const LETTER_GAP = 10
const styles = StyleSheet . create ( {
container : {
flexGrow : 1 ,
alignItems : 'center' ,
justifyContent : 'center' ,
} ,
grid : {
backgroundColor : 'rgba(0,0,0,0.1)' ,
alignItems : 'center' ,
justifyContent : 'flex-start' ,
width : LETTER_WIDTH * GRID_SIZE + LETTER_GAP * ( GRID_SIZE - 1 ) ,
gap : LETTER_GAP ,
borderRadius : 32 ,
} ,
draggable : {
backgroundColor : 'seagreen' ,
width : LETTER_WIDTH ,
height : LETTER_HEIGHT ,
borderColor : 'rgba(0,0,0,0.2)' ,
borderWidth : 1 ,
overflow : 'hidden' ,
alignItems : 'center' ,
justifyContent : 'center' ,
borderRadius : 32 ,
} ,
text : {
color : 'white' ,
fontWeight : 'bold' ,
fontSize : 32 ,
} ,
} )
Describe the bug
When you change the number of elements in the array, the binding to the positions flies and everything breaks.
Platform & Dependencies
{
"expo" : " ~53.0.10" ,
"@mgcrea/react-native-dnd" : " ~2.5.3" ,
"react-native-gesture-handler" : " ~2.25.0" ,
"react-native-reanimated" : " ~3.18.0" ,
}
2025-06-12.14.16.34.mp4
Describe the bug
When you change the number of elements in the array, the binding to the positions flies and everything breaks.
Platform & Dependencies
{ "expo": "~53.0.10", "@mgcrea/react-native-dnd": "~2.5.3", "react-native-gesture-handler": "~2.25.0", "react-native-reanimated": "~3.18.0", }2025-06-12.14.16.34.mp4