Textarea 多行输入
Textarea 固定 multiline 并顶对齐;单行请用 Input。它与 Input 使用相同严格受控/非受控 union、slot、错误和 ref 契约。
内容布局与消费交接
输入表面(包括内部 padding 和边框)在 minHeight / maxHeight 范围内增长与缩短;错误说明在表面外,不占上限。首次长文、外部 value 更新、宽度与应用字号变化后,按真实内容重新测量;超过上限默认内部滚动,不截断文字。省略 maxHeight 可持续增长。
受控清空通过外部 value 更新,ref 仍仅有 focus / blur。onFocus / onBlur 与 onContentSizeChange 原样交付;contentSize 是文字测量,组合区的总高度应由消费者自己的 onLayout 测量。页面负责键盘避让,回车可显式设置 submitBehavior="newline",发送与语音采集留在消费者。
用法
<Textarea defaultValue="首次草稿" minHeight={120} maxHeight={240} />
<Textarea value={note} onChangeText={setNote} error={note ? undefined : '请输入备注'} />
defaultValue 只用于首次初始化;受控模式必须同时传 value 和 onChangeText,两种 mode 不能中途切换。
高度与 a11y
minHeight默认 96,必须是有限且至少 44 的数;非法值回退 96。maxHeight缺省时不限制;只有有限且不小于归一化后的 min 时生效,否则回退为无上限。containerStyle不能覆盖高度、min/max 尺寸、min/max 宽或overflow,运行时 JS 传入也会剥除。leading/trailing只接受TextFieldSlot。action slot 有 44×44pt 实际 frame,字段不可编辑时 action 也不可操作。- ref 是
TextFieldHandle,只有focus()/blur();readOnly改用editable={false}。
错误文字 Android 使用 polite live region;iOS 只播报挂载后的非空错误变更。请给没有可见标签的字段传 accessibilityLabel。