用react-native-reanimated-dnd打造水平排序列表:滑动重排交互完整教程
【免费下载链接】react-native-reanimated-dndA 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 是一款基于 Reanimated 4 与 Gesture Handler 构建的 React Native 拖拽排序库提供 60fps 平滑动画、碰撞检测与完整 TypeScript 支持。本教程面向新手带你从零实现一个可水平滚动的排序列表——无论是标签栏、分类轮播还是自定义工具栏滑动重排的交互体验只需几行配置就能完成。 为什么选它水平排序列表的 5 大核心优势在 React Native 中实现「按住拖动 → 松手吸附 → 列表自动补位」这套交互手写通常需要几十行手势与动画代码而且很容易掉帧。react-native-reanimated-dnd 把这套逻辑封装成了开箱即用的Sortable组件丝滑 60fps动画全部运行在 Reanimated 4 的 Worklet 线程不阻塞 JS 主线程拖动过程不卡顿垂直 水平双方向同一套 API切换direction属性即可从竖排列表变成横排轮播边缘自动滚动拖拽靠近列表左右边缘时列表自动跟随滚动无需自己写滚动逻辑拖拽手柄模式可以指定「只有按住小把手才能拖动」适合卡片中带按钮的复杂 UITiny 类型安全约 70kb 的包体全量 TypeScript 定义配合 FlatList 虚拟列表可承载长列表⚡ 最快安装步骤3 个依赖搞定环境水平排序功能属于库的核心能力安装主包 3 个 peer 依赖即可npm install react-native-reanimated-dnd npm install react-native-reanimated react-native-gesture-handler react-native-worklets版本要求react-native-reanimated4.x、react-native-gesture-handler2.x、react-native-worklets0.7见 package.json。Expo 项目可用npx expo install安装完整步骤参考 documentation/web-docs/docs/getting-started/installation.md。️ 3 步实现水平排序列表第 1 步准备数据。每条数据必须带一个稳定的id字符串字段interface Tag { id: string; label: string; color: string; }第 2 步配置Sortable组件。关键是directionhorizontal此时itemWidth每项固定宽度变为必填参数Sortable data{tags} renderItem{renderTag} directionhorizontal // 开启水平模式 itemWidth{120} // 水平模式必填每项宽度 gap{12} // 项间距 paddingHorizontal{16} // 容器左右内边距 /第 3 步在renderItem中返回SortableItem。把组件传入的positions、leftBound、autoScrollHorizontalDirection等状态原样透传库就会自动接管拖拽、动画与重排const renderTag ({ item, id, positions, leftBound, autoScrollHorizontalDirection, itemsCount, itemWidth, gap, paddingHorizontal }) ( SortableItem key{id} id{id} data{item} positions{positions} leftBound{leftBound} autoScrollHorizontalDirection{autoScrollHorizontalDirection} itemsCount{itemsCount} directionhorizontal itemWidth{itemWidth} gap{gap} paddingHorizontal{paddingHorizontal} View style{{ backgroundColor: item.color, borderRadius: 20 }} Text{item.label}/Text /View /SortableItem );运行后你就能获得完整的滑动重排体验长按约 200ms 触发拖起源码见 hooks/useHorizontalSortable.ts拖动中其他项自动让位松手后弹簧动画归位。下面的动画演示了库的整体拖拽效果 关键参数配置表宽度、间距与自动滚动参数必填说明direction是设为horizontal或SortableDirection.Horizontal开启水平模式itemWidth是每项固定宽度水平模式下所有项必须同宽gap否项与项之间的像素间距推荐 8–16paddingHorizontal否容器左右内边距containerWidth否容器宽度用于自动滚动计算可用useWindowDimensions传入屏幕宽useFlatList否默认true用 FlatList 虚拟列表渲染长列表性能更好itemKeyExtractor否自定义从数据中提取id的方式默认取item.id回调方面SortableItem提供了完整的拖拽生命周期钩子onDragStart拖起、onDragging拖动中可拿到当前悬停项与 X 坐标、onMove位置变化、onDrop落下附allPositions全量位置。完整参数表见 documentation/web-docs/docs/hooks/useHorizontalSortable.md。 拖拽手柄模式只按住图标才能重排如果卡片上有按钮或输入框整卡可拖会误触。此时用SortableItem.Handle包裹一个小把手只要注册了手柄整卡拖拽手势会自动禁用该逻辑在 hooks/useHorizontalSortable.ts 中实现SortableItem.Handle Icon namedrag-handle size{16} / /SortableItem.Handle仓库示例应用里就内置了「整卡拖 / 手柄拖」两种模式的切换演示可直接对照example-app/components/HorizontalSortableExample.tsx。 自动滚动原理拖到边缘 60px 内列表自动跟随水平列表最常见的痛点是屏幕一次只显示几个项要拖到远处的位置必须先手动滚动。这个库把它做成了自动的——拖拽中当项接近左/右边缘阈值不小于 60px见 components/sortableUtils.ts列表会平滑地向对应方向滚动松手前你能把项一路「送」到列表末端。整个滚动状态通过useHorizontalSortableList的scrollX与autoScroll共享值驱动列表手动滑动时也能与拖拽状态正确同步。⚠️ 常见坑与状态管理onMove 里别急着 setState这是新手最容易踩的坑Sortable组件自己维护排序状态拖动时的重排、动画补位都由内部状态驱动。正确姿势是✅ 在onMove里做日志、埋点等副作用✅ 在onDrop的allPositions参数中读取最终顺序并持久化❌ 不要在onMove里直接setState重排外部数组会破坏内部状态导致动画错乱官方文档明确写了这一条详见 documentation/web-docs/docs/components/sortable.md。 性能优化清单4 个要点保证不掉帧保持 FlatList 虚拟列表默认开启项数上百时不要关闭稳定的 id数据项的id在重渲染间必须稳定否则位置映射会错乱回调记忆化onMove、onDrop等用useCallback包裹避免重复创建拖拽中样式用isMoving切换透明度、缩放等视觉反馈只在拖起时应用参考示例应用中标签的高亮处理 适用场景4 类高频水平重排交互标签选择器技术栈标签、关注话题用户可自定义展示顺序分类轮播商品分类、频道入口横向卡片带拖拽手柄导航 Tab / 工具栏让用户自定义功能入口顺序媒体轮播图片、视频缩略图按优先级排序更多场景与完整示例代码见官方文档 documentation/web-docs/docs/examples/horizontal-sortable.mdx。 源码与文档导航模块路径排序组件水平模式入口components/Sortable.tsx水平项组件components/SortableItem.tsx单项拖拽逻辑hooks/useHorizontalSortable.ts列表状态管理hooks/useHorizontalSortableList.ts自动滚动工具函数components/sortableUtils.ts示例应用可运行 Demoexample-app/components/HorizontalSortableExample.tsx水平排序文档页documentation/web-docs/docs/examples/horizontal-sortable.mdx总结用 react-native-reanimated-dnd 打造水平排序列表只需要记住三件事装上库和 3 个依赖、给Sortable加上directionhorizontal和itemWidth、把SortableItem的透传状态接好。长按拖起、边缘自动滚动、弹簧归位动画全部内置你只需专注设计每项的 UI。从标签栏到媒体轮播这套滑动重排交互可以直接搬进你的产品里。赞分享【免费下载链接】react-native-reanimated-dndA 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拖拽排序完整教程打造流畅的移动端交互体验React Native拖拽排序完整教程打造流畅的移动端交互体验 在移动应用开发中列表元素的拖放排序是提升用户体验的重要功能。react native drReact-Native可排序列表视图教程React Native可排序列表视图教程 1. 项目介绍 React Native可排序列表视图是一个适用于Android和iOS的React Native组如何用React DnD构建可排序列表完整实现指南如何用React DnD构建可排序列表完整实现指南 React DnD拖放是一个强大的React拖放库专门用于构建复杂的拖放界面。本文将为你展示如何使用前端UI组件创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

Kubernetes网络本质:从Pod访问Service看三层模型协同

Kubernetes网络本质:从Pod访问Service看三层模型协同

1. 项目概述:从一个最朴素的请求出发,理解Kubernetes网络的本质“在pod中访问另外一个服务”——这句话看起来平平无奇,甚至有点像刚学完Docker后顺手写的curl命令。但当你把它放进Kubernetes环境里,它就成了一面照妖镜&#xff0…

2026/10/15 15:13:58 阅读更多 →
Flutter颜色系统全解析与最佳实践

Flutter颜色系统全解析与最佳实践

1. 为什么需要系统学习Flutter颜色在移动应用开发中,颜色管理看似简单实则暗藏玄机。我见过太多开发者因为颜色处理不当导致的应用被拒案例——某金融应用因为夜间模式颜色对比度不足被App Store驳回,某电商应用因为主题色在不同设备上显示不一致遭到用户…

2026/10/15 15:13:58 阅读更多 →
Oppia 探索玩家共享服务层(Shared Services)源码指南:Lesson Player 双实现下的架构、维护规范与测试策略

Oppia 探索玩家共享服务层(Shared Services)源码指南:Lesson Player 双实现下的架构、维护规范与测试策略

教育后端前端 【免费下载链接】oppia A free, online learning platform to make quality education accessible for all. 项目地址: https://gitcode.com/gh_mirrors/op/oppia 点击查看 免费下载 本指南以 Oppia 仓库中 core/templates/pages/exploration-player-…

2026/10/15 15:12:56 阅读更多 →

最新新闻

粮油方向论文降重:三类做法的实际体验对比

粮油方向论文降重:三类做法的实际体验对比

粮油方向的论文,重复率高的地方很固定:国标检测方法的步骤描述、原料特性的通用表述、工艺原理的铺垫段。这三类占了重复的大头。要降得干净,得先分清哪些能改、哪些碰不得。 一、先划"不能改"的线 这一步必须在动手前做&#xf…

2026/10/15 16:47:54 阅读更多 →
从零构建月球着陆模拟器:物理模拟与状态机实战

从零构建月球着陆模拟器:物理模拟与状态机实战

最近我把一个存了很久的想法落地了:做一个纯粹的月球着陆模拟器,项目代号就叫 Apollo-11。名字不复杂,但它把我的目标说得很清楚——让玩家用有限的燃料,手动控制一艘着陆器,在起伏的月面上找到一块平地,减…

2026/10/15 16:47:54 阅读更多 →
ESP32修复USB4000光谱仪变砖:EEPROM固件恢复实战

ESP32修复USB4000光谱仪变砖:EEPROM固件恢复实战

1. 项目背景与核心需求拆解1.1 一台“变砖”的光谱仪到底意味着什么手里有一台USB4000光谱仪,插上电脑之后系统毫无反应,设备管理器里连未知设备都不弹出来,这种状态在硬件圈子里通常被叫做“变砖”。光谱仪这类精密光学仪器,内部…

2026/10/15 16:47:54 阅读更多 →
905 nm激光测距模块UART驱动与ROS 2集成实战

905 nm激光测距模块UART驱动与ROS 2集成实战

1. 从一束不可见光说起:905 nm 测距模块到底在解决什么问题如果你玩过扫地机器人、做过无人机定高、或者给机械臂加过避障,大概率绕不开一个东西:激光测距模块。市面上常见的方案有超声波、红外三角测距、ToF 摄像头,还有一类就是…

2026/10/15 16:47:54 阅读更多 →
C# WinForms接口调试工具:HttpClient+SQLite工程化实践

C# WinForms接口调试工具:HttpClient+SQLite工程化实践

简介:这是一款基于C#开发的轻量级Windows桌面接口测试工具,面向.NET初学者、Web API开发者及测试人员,用于快速验证HTTP接口功能与响应行为。工具采用WinForm框架构建图形界面,原生支持GET、POST、PUT、DELETE四种标准请求方法&am…

2026/10/15 16:47:54 阅读更多 →
Transformer为什么强?解析全局建模、并行计算与多模态扩展优势

Transformer为什么强?解析全局建模、并行计算与多模态扩展优势

最近总有人问我同一个问题:Transformer 到底比其他模型强在哪。我做了几年序列建模相关的工作,文本分类、机器翻译、多模态对齐这些任务都反复折腾过,每次换架构、调参、对比实验做下来,对“强”字的理解其实和刚接触时不太一样。…

2026/10/15 16:46:53 阅读更多 →

日新闻

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

1. 为什么选择容器化方式部署 LoRa 网络服务LoRa 物联网项目落地时,网络服务器是整个链路的核心枢纽。它负责接收网关上报的数据包、完成去重与解密、再把有效载荷分发给上层应用。早期大家习惯把网络服务器直接装在物理机上,依赖一堆系统库和特定版本的…

2026/10/15 0:00:46 阅读更多 →
共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

1. 共享推理服务里,扩缩容到底难在哪做过大模型推理服务部署的人,大概都经历过这样的场景:一个团队共用一套推理集群,A 业务跑的是 7B 的小模型,B 业务跑的是 72B 的大模型,C 业务白天流量高、晚上几乎归零…

2026/10/15 0:00:46 阅读更多 →
Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

1. 引子:一次内核恐慌引发的追查先从一个真实场景说起。某次我给一台老旧的嵌入式设备折腾系统裁减,为了把启动时间压进两秒以内,我手贱地把一串自认为“没用”的 systemd 服务给 disable 了,其中就包括systemd-remount-fs.servic…

2026/10/15 0:00:46 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/15 16:18:54 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/14 16:30:29 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/15 13:48:15 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 0:14:36 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 22:45:47 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 9:49:14 阅读更多 →