react-native与react-native-gesture-handler中TextInput的区别是什么?
导入路径不同
原生组件导入方式:import { TextInput } from 'react-native'
手势库组件导入方式:import { TextInput } from 'react-native-gesture-handler'手势冲突处理能力不同
原生 TextInput 基于 RN 自带的 JS 层触摸响应系统实现,嵌套在ScrollView、FlatList等可滚动容器,或者和自定义手势组件共存时,很容易出现点击不聚焦、软键盘触发后立即收回、滑动时输入状态异常等手势冲突问题。
react-native-gesture-handler 版本的 TextInput 基于原生侧手势识别系统实现,会自动和手势库的其他手势识别器做优先级协调,基本可以规避上述手势冲突问题,嵌套在复杂手势交互场景下的稳定性远高于原生组件。属性兼容性不同
手势库的 TextInput 100% 兼容原生 TextInput 的所有属性,原有业务代码可以直接平替,不需要修改任何现有配置。仅额外扩展了少量和手势优先级相关的配置项,无特殊需求不需要额外传参。适用场景不同
普通表单页、无复杂手势交互的页面,直接用原生 TextInput 即可,不需要额外引入依赖。
包含自定义滑动手势、下拉刷新、抽屉组件、多手势联动的页面,或者输入框在可滚动容器内频繁出现点击无响应的问题,直接替换成手势库版本是成本最低的解决方案。底层实现逻辑不同
原生 TextInput 的触摸响应分发逻辑走 JS 线程,JS 线程阻塞时可能出现输入响应延迟。手势库版本的 TextInput 触摸识别、优先级判断逻辑完全在原生侧执行,不受 JS 线程阻塞影响,极端场景下输入响应速度更稳定。
补充说明:如果项目内已经开启了 react-native-gesture-handler 的全局组件替换开关,导入原生 TextInput 时会自动被替换为手势库版本,无需手动修改导入路径。
内容的提问来源于stack exchange,提问作者SoF

