Javascript 反应本机:道具更改导致触摸事件取消

Javascript 反应本机:道具更改导致触摸事件取消,javascript,arrays,reactjs,react-native,Javascript,Arrays,Reactjs,React Native,我正在使用react原生手势处理程序库创建组件的拖放可排序数组。我现在已经到了我开始为它添加动画的时候了。我通过使用layoutaimations.configureNext(Constants.MyAnimConfig)在我希望为下一次更改设置动画的选定位置执行此操作 数据数组本身(data),以及一个基本呈现函数(renderItem({item,index})),以及一个在数据数组重新排序时调用的函数(onReorder:{ 常量IsBeingDrawed=isMoving&&index=

我正在使用
react原生手势处理程序
库创建组件的拖放可排序数组。我现在已经到了我开始为它添加动画的时候了。我通过使用
layoutaimations.configureNext(Constants.MyAnimConfig)
在我希望为下一次更改设置动画的选定位置执行此操作

数据数组本身(
data
),以及一个基本呈现函数(
renderItem({item,index})
),以及一个在数据数组重新排序时调用的函数(
onReorder:
编辑:
看来我的猜测是因为更新道具(从而触发重新渲染)导致的,这是不正确的。即使在本地状态下,也会取消触摸。下一步是尝试将其放入组件范围之外的减速器功能中,并祈祷

编辑2:
数据
数组移动到减缩器中也不起作用。此时,我只有一个猜测。我的列表组件将
renderItem
道具包装在自己的
\u renderItem
函数中,该函数将列表项包装在
PanGestureHandler
中,如下所示:

const _renderItem = ({item, index}) => {
    const isBeingDragged = isMoving && index === dragIndex;

    const style: ViewStyle = {
      width: itemStyle.width,
      height: itemStyle.width,
      opacity: isBeingDragged ? 0 : 1,
    };

    return (
      <PanGestureHandler
        key={`handler-${item.name}`}
        onGestureEvent={e => onMove(e, index)}
        onHandlerStateChange={e => onState(e, index)}>
        <Animated.View style={{...itemStyle, ...style}}>
          {renderItem({item, index})}
        </Animated.View>
      </PanGestureHandler>
    );
  };
const\u renderItem=({item,index})=>{
常量IsBeingDrawed=isMoving&&index==dragIndex;
常量样式:视图样式={
宽度:itemStyle.width,
高度:itemStyle.width,
不透明度:正在拖动?0:1,
};
返回(
onMove(e,index)}
onHandlerStateChange={e=>onState(e,索引)}>
{renderItem({item,index})}
);
};

我现在的假设是,该事件被取消,因为触发并继续触摸事件的
PanGestureHandler
由于数组重新排序而被重新渲染。至于为什么只有当元素向下移动时才会发生这种情况,这是任何人的猜测。此时,我已经没有想法了。

因此,我确实对t进行了研究他最后一次编辑。处理平移运动的
的重新渲染取消了该手势。这是因为我在列表中为每个渲染项包含了一个
。而这是一种方便的方法,可以获取用户拖动的元素的索引,并将其传递给
OnGetureEvent
e> onHandlerStateChange
事件处理程序,它最终不得不退出

我从一开始就应该做的是只渲染一个
,并将其放在列表上方,然后使用我创建的函数获取数组中基于XY坐标的元素索引以获取索引。这就是我最终所做的:

  <PanGestureHandler onGestureEvent={onMove} onHandlerStateChange={onState}>
    <View
      onLayout={({nativeEvent: {layout}}) => setContainerView(layout)}
      style={styles.listContainer}>
      {data.map((item, index) => _renderItem({item, index}))}
    </View>
  </PanGestureHandler>

setContainerView(布局)}
style={styles.listContainer}>
{data.map((项,索引)=>\u renderItem({项,索引}))}
如果您面临类似的问题,您应该查看我创建的要点。请记住,此列表创建为水平的,这可能与您自己的实现不同。它也需要一些更改。相应地计划