跳到主要内容

TextField 输入框 base(internal)

src/components/ui/TextField/Input / Textarea / PasswordInput / Search 这些公开输入组件共享的内部 base,处理:

  • TextInput 基础 props 透传
  • leading / trailing slot(图标 / 按钮槽位)
  • error 文案 + border 红色态切换
  • disabled 整体半透明 + editable 锁
  • 单行 / 多行布局切换(multiline prop)

业务层不应直接 import TextField。所有调用方场景都有更精准的封装:

场景
单行输入<Input>
密码 / 隐显切换<PasswordInput>
搜索栏(图标 + 占位)<Search>
多行输入<Textarea>

设计意图

TextField 抽出来是为了消除 Input / Textarea 之间 50%+ 重复代码(focus 态 border 切换 / disabled 灰化 / error 文案下挂 / leading-trailing slot 布局)。它是实现细节,不是稳定 API,后续重构可能换内部结构。

如果你正在调用 TextField,99% 的可能性是该用 Input / Textarea。

实现路径

src/components/ui/
├── TextField/ ← 共享 base(本组件,internal)
├── Input/ ← multiline=false 单行封装
├── Textarea/ ← multiline=true 多行封装
├── PasswordInput/ ← Input + trailing 眼睛 toggle + secureTextEntry
└── Search/ ← Input + leading 搜索图标 + 圆角胶囊预设

不要

  • 不要 import { TextField } from '@unif/react-native-design' —— 用对应高层组件,见上表
  • 不要把 TextField 当公共 API 写测试 —— 测 Input / Textarea / PasswordInput / Search 的行为,TextField 实现细节会变