☰
从零搭建第一个拖拽交互:react-native-reanimated-dnd新手入门完全教程
2026/10/15 15:40:07 网站建设 项目流程

【免费下载链接】react-native-reanimated-dnd

A powerful, performant drag-and-drop library for React Native built on Reanimated 4 and Gesture Handler. Smooth 60fps animations, sortable lists & grids, collision detection, and full TypeScript support.

项目地址:https://gitcode.com/gh_mirrors/re/react-native-reanimated-dnd
点击查看免费下载

react-native-reanimated-dnd是一个专为 React Native 打造的高性能拖拽交互(drag-and-drop)库,基于 Reanimated 4 与 Gesture Handler 构建,能实现流畅的 60fps 动画、拖拽排序列表/网格、碰撞检测,并提供完整的 TypeScript 支持。本教程带你从零安装、到跑通第一个可拖拽、可放置、可排序的交互界面,全程面向新手,代码量极少。

为什么选 react-native-reanimated-dnd

很多拖拽库是从 Web 移植过来的,在移动端要么卡顿、要么早已停更。而这个库是为移动端原生设计的"完整生态",核心卖点:

特性说明
🚀 高性能Reanimated 4 + Worklets 驱动,稳定 60fps
📱 移动端优先专为 RN 设计,非 Web 移植
🎯 组件全家桶Draggable/Droppable/Sortable/SortableGrid
🎪 智能碰撞检测center、intersect、contain 三种算法
📜 可排序列表支持垂直、水平方向,含自动滚动
🔲 可排序网格2D 网格拖放,支持插入/交换模式
🔧 全类型安全完整 TypeScript 类型定义
🪶 体积小解压后仅约 70KB,不拖累包体

💡 一句话记忆:想拖拽 →Draggable,想接住 →Droppable,想排序 →Sortable。

环境要求与一键安装步骤

1. 确认版本兼容

该库依赖几个"搭档"包,需要一起安装。版本对照如下:

react-native-reanimated-dndReact NativeReanimatedGesture HandlerWorkletsExpo SDK
2.x.x0.80+4.x.x2.28+0.7+55+

⚠️ Reanimated 4要求启用 New Architecture,且 Expo 项目必须用开发构建(development build),不能用 Expo Go。

2. 安装命令

普通 React Native CLI 项目:

npm install react-native-reanimated-dnd npm install react-native-reanimated react-native-gesture-handler react-native-worklets

Expo 项目(SDK 55+):

npx expo install react-native-reanimated-dnd react-native-reanimated react-native-worklets react-native-gesture-handler

3. 两个必做配置

  • Babel 插件:在babel.config.js中把react-native-worklets/plugin放在插件数组的最后一位。
  • 根视图包裹:用GestureHandlerRootView包裹整个应用,它是手势识别生效的前提。

安装配置的细节可参考仓库内文档:installation.md。

三个核心组件:DropProvider、Draggable、Droppable

理解拖拽库,先记住它的组件层级结构(上下文通信架构):

App └── GestureHandlerRootView ← 手势根容器(必需) └── DropProvider ← 创建拖放上下文(必需) ├── Draggable ← 可被拖动的"物品" └── Droppable ← 可接收物品的"区域"
  • DropProvider:整个拖放系统的"地基",负责组件注册、碰撞检测、状态与位置跟踪。所有拖放组件都必须放在它的内部。源码见 context/DropContext.tsx。
  • Draggable:被拖动的对象,通过data属性携带数据,源文件 components/Draggable.tsx。
  • Droppable:目标区域,通过onDrop回调接收数据,源文件 components/Droppable.tsx。

数据流很简单:Draggable携带的数据,会在被放下时通过Droppable的onDrop回调传递给你。

跑通第一个拖拽示例

下面是最小可运行的"拖到目标区域"示例,跟着写一遍即可上手:

import { GestureHandlerRootView } from "react-native-gesture-handler"; import { DropProvider, Draggable, Droppable } from "react-native-reanimated-dnd"; export default function App() { return ( <GestureHandlerRootView style={{ flex: 1 }}> <DropProvider> <Droppable onDrop={(data) => console.log("放下了:", data)}> <View> <Text>放到这里</Text> </View> </Droppable> <Draggable data={{ id: "1", title: "拖我一下!" }}> <View> <Text>拖我一下!</Text> </View> </Draggable> </DropProvider> </GestureHandlerRootView> ); }

如果能把"拖我一下"拖进"放到这里"的区域,就说明环境已搭好 ✅。完整的验证组件见快速上手文档:quick-start.md。

进阶:用 Sortable 做出拖拽排序列表

当你不想"拖到某处",而是想拖动列表项重新排序(如音乐播放队列、任务列表)时,就用Sortable+SortableItem。它们会自动处理重排动画与自动滚动,无需你手动管理数组。

使用要点(来自 README 的 Sortable List 示例):

  • 每个数据项必须有字符串类型的id,这是库追踪与重排的依据;
  • Sortable通过data传入数组、renderItem渲染每一项、itemHeight指定项高度;
  • 可用SortableItem.Handle声明一个专属拖拽手柄区域(如右侧的 ⋮⋮)。

⚠️ 状态管理提醒:排序组件维护内部状态。不要在onMove回调里直接去改外部数组(setItems、Redux 等),onMove只用于埋点、日志等副作用;组件会自动完成内部重排。

组件与 Hook 源码参考:components/Sortable.tsx、components/SortableItem.tsx、hooks/useSortable.ts。

新手常见问题快速排查

现象大概率原因与解法
Cannot read property 'install' of undefinedReanimated 未装好;确认 Babel 已加插件、重启 Metro、重新构建
RNGestureHandlerModule is nullGesture Handler 未链接;iOS 跑pod install,Expo 确认用开发构建而非 Expo Go
Metro 打包异常npx expo start -c或npx react-native start --reset-cache清缓存
Expo Go 里跑不起来库含原生代码,必须用npx expo run:ios / run:android开发构建

更完整的排查清单见 installation.md 的 Troubleshooting 一节。

想直接看完整效果?运行官方示例 App

仓库内置了包含18 个交互式 Demo的示例应用,覆盖基本拖放、拖拽手柄、碰撞检测、边界约束、动态高度、网格排序等全部能力。可先克隆仓库:

git clone https://gitcode.com/gh_mirrors/re/react-native-reanimated-dnd cd react-native-reanimated-dnd npm install

然后按 example-app/README.md 启动,入口在 example-app/App.tsx,示例组件集中在 example-app/components/ 目录下。

小结与下一步

  • 用DropProvider+GestureHandlerRootView搭好"地基";
  • 用Draggable/Droppable实现最基本的拖放交互;
  • 用Sortable/SortableItem(以及SortableGrid)实现拖拽排序;
  • 记住数据项必须有字符串id,排序组件不要手动改外部状态。

接下来建议阅读 basic-concepts.md 理解上下文通信架构,并在 index.ts 中查看当前导出的全部组件、Hooks 与工具函数,逐步解锁更多高级能力。

【免费下载链接】react-native-reanimated-dnd

A powerful, performant drag-and-drop library for React Native built on Reanimated 4 and Gesture Handler. Smooth 60fps animations, sortable lists & grids, collision detection, and full TypeScript support.

项目地址:https://gitcode.com/gh_mirrors/re/react-native-reanimated-dnd
点击查看免费下载

相关推荐

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询