React Native 新架构实战课
蒋宏伟
58 同城前端架构师,58RN 负责人
18214 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 42 讲
React Native 新架构实战课
15
15
1.0x
00:00/00:00
登录|注册

07|TextInput:如何实现一个体验好的输入框?

你好,我是蒋宏伟。
上一讲,我们介绍了如何去打磨点按组件的体验细节,这一讲我们就开始介绍如何打磨一个文本输入组件 TextInput 的体验细节。
作为一个优秀工程师,要想优化页面的用户体验,只知道打磨点按组件是远远不够的,而且,相对于点按组件组件来说,要把文本输入组件 TextInput 的细节体验弄好,要更难一些。
这个难点主要有两方面。首先,TextInput 组件是自带状态的宿主组件。TextInput 输入框中的文字状态、光标状态、焦点状态在 React Native 的 JavaScript 框架层的框架层有一份,在 Native 的还有一份,有时候业务代码中还有一份。那多份状态到底以谁为主呢?这件事我们得搞清楚。
其次,TextInput 组件和键盘是联动的,在处理好 TextInput 组件的同时,我们还得关心一下键盘。当然键盘本身是有 Keyboard API 的,但是键盘类型是“普通键盘”还是“纯数字键盘”,或者键盘右下角的按钮文字是“确定”还是“搜索”,都是由 TextInput 组件控制的。
这一讲,我将以如何实现一个体验好的输入框为线索,和你介绍使用 TextInput 组件应该知道的三件事。

输入框的文字

第一件事,你得知道如何处理输入框的文字。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文深入探讨了在React Native中优化文本输入组件的体验细节,主要围绕TextInput组件展开。首先介绍了处理输入框文字的两种方式:受控组件和非受控组件,并比较了它们之间的区别。其次,讨论了处理输入框焦点的两种方式:声明式的autoFocus属性和命令式的ref.current.focus()方法。最后,重点关注了与输入框联动的键盘体验细节,包括键盘右下角按钮的功能、文案变化和系统记住账号密码功能。通过这些内容,读者可以全面了解如何处理TextInput组件的体验细节,包括文字处理、焦点控制和键盘联动,从而提升React Native应用的用户体验。文章内容涵盖了丰富的技术细节,对于React/React Native开发者来说具有很高的实用价值。文章还提到了iOS模拟器上的测试问题以及React Native的新架构预览版的使用方法。此外,还提出了两个作业问题,分别是实现验证码输入框组件和思考TextInput的异步onChange和同步onChangeSync的区别以及Fabric的同步特性对React Native的影响。这些内容将有助于读者更深入地了解React Native的优化技术和未来发展方向。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《React Native 新架构实战课》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(10)

  • 最新
  • 精选
  • AEPKILL
    iOS 模拟器也是可以弹出键盘的,只要把 Hardware -> Keyboard -> Connect HardWare KeyBoard 的勾去掉就可以了。 验证码组件我的思路是这样的: 1. 放置一个隐藏的 TextInput 2. 画短信验证码输入的 UI (其实就是几个格子) 3. 点击验证码 UI 的时候调用 textInptRef.focus() 4. 接受输入,划到对应的验证码格子里 完整代码: https://gist.github.com/AEPKILL/3557c4b5b621a3aec36e7e3cd8571e56

    作者回复: iOS 模拟器可以弹出键盘,学到了👍 除了隐藏 TextInput 我还有一种思路,就是直接使用显示的 TextInput + letterSpacing 控制字间距。

    2022-04-15
    3
    7
  • 小天儿
    老师,TextInput 间进行跳转时,键盘总是会先收起再弹出,而在某些应用中,多个输入框之间跳转是不会收起键盘的,如何解决这个问题呢?

    作者回复: 你可以试着将 ScrollView 组件的 keyboardShouldPersistTaps 属性设置为 handled 试试。 文档如下: keyboardShouldPersistTaps:Determines when the keyboard should stay visible after a tap. - 'never' tapping outside of the focused text input when the keyboard is up dismisses the keyboard. When this happens, children won't receive the tap. - 'always', the keyboard will not dismiss automatically, and the scroll view will not catch taps, but children of the scroll view can catch taps. - 'handled', the keyboard will not dismiss automatically when the tap was handled by children of the scroll view (or captured by an ancestor).

    2022-05-16
    2
  • dao
    1, 新手,代码 https://github.com/hdouhua/hybrid-mobile-app/tree/main/AwesomeProject/src/c07。 2,不知道怎么的,在文档里找不到 TextInput 的方法 onChangeSync

    作者回复: 给你认真的学习态度点赞。 1. 实际上输入手机验证码这道题,它只需要一个,textinput 能够实现哦,我看到你有比较多 text,这一块还有改进空间。 关键提示:letterSpacing 2. onChangeSync 它还是一个私有的属性,你可以在源码中看到。

    2022-04-17
    3
  • 见字如晤
    还有一个特别重要的细节是,输入框与键盘的位置。键盘弹起的时候,是否有遮盖输入框的表现;如果没有,键盘会不会把整个页面往上顶起;Android和iOS表现这方面表现是否一致
    2022-05-17
    2
  • demoker
    下载的demo在iPhone上运行报错呢?Invariant Violation: requireNativeComponent: "RTNCustomView" was not found in the UIManager.
    2023-12-21归属地:北京
  • Wcly👺
    要做一个文本编辑器,怎么控制光标适中在可视区域,就是横向输入长文本到输入框的时候能自动横向滚动,垂直换行的时候能自动垂直滚动,类似vscode的编辑页面。
    2022-11-21归属地:广东
  • Hozan
    TextInput是不是没法禁止它复制粘贴?在Android上不生效
    2022-08-10归属地:广东
  • 大神博士
    “但是 Fabric 之后(包括 Fabric 预览版),setNativeProps 就不能用了。” 有传送门吗?
    2022-07-05
  • 下一刻。
    老师问一下:TextInput如何插入图片(自定义表情),如何使不同段的文字颜色不一样(话题)。
    2022-06-13
  • 小天儿
    1. 代码:https://snack.expo.dev/@sh-winter/textinput 2. onChnage 与 onChangeSync 的区别:个人认为 onChangeSync 比 onChange 响应的更快,适用于更高优先级的场景;Fabric 同步的特性与 react 18 结合将带来并发渲染,可中断渲染等新特性,实现在大规模 UI 更新时保持响应
    2022-05-16
收起评论
显示
设置
留言
10
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部