跳到主要内容

Textarea 多行输入

多行文本输入框,视觉与 Input 完全一致,但内置 multiline=true + 顶对齐 + [minHeight, maxHeight] 自适应。

单行内容请用 <Input />。Textarea 内部固定 multiline=true,不可关闭。

实时预览

下方渲染的就是 src/components/ui/Textarea/Textarea.tsx 本体。

idle · 默认 minHeight 96,约 5 行
filled · 已有内容
error · 校验未通过
字数太少(≥10 字)
disabled · 整体灰化、不可编辑

状态

跟 Input 一致:idle / focus / filled / error / disabled。状态由 props 隐式驱动,无需业务管。

视觉规范

元素规则
最小高度96px (约 5 行;可用 minHeight 覆盖)
最大高度不限 (传 maxHeight 后超出滚动)
圆角8px
内边距10 12px (左右 12px,上下 10px)
字号15px (body)
文本对齐顶部 (textAlignVertical='top',跨平台统一)

用法

import { Textarea } from '@unif/react-native-design';

{/* 默认 minHeight=96 */}
<Textarea value={note} onChangeText={setNote} placeholder="详细说明…" />

{/* 固定区间高度(超出滚动) */}
<Textarea
value={text}
onChangeText={setText}
minHeight={120}
maxHeight={240}
placeholder="可拖动滚动的长文本…"
/>

{/* 错误态 */}
<Textarea value={text} onChangeText={setText} error="字数太少(≥10字)" />

{/* 禁用 */}
<Textarea value={text} onChangeText={setText} disabled />

{/* forwardRef + focus */}
const textareaRef = useRef<TextInput>(null);
<Textarea ref={textareaRef} placeholder="内容" />
{/* 业务调 textareaRef.current?.focus() 主动聚焦 */}

API

TextareaProps = Omit<TextInputProps, 'style' | 'multiline' | 'numberOfLines'> + 这 7 个扩展。multiline 已内置无需传;numberOfLines 故意 omit(用 minHeight / maxHeight 表达更直观)。

PropType说明
leadingReactNode?前置插槽(顶对齐渲染)
trailingReactNode?后置插槽(如字符计数器)
errorstring?错误文字 —— 容器进入 error 态并在下方显示
minHeightnumber?最小高度,默认 96。业务传 <20 时内部已 Math.max 保护
maxHeightnumber?最大高度,超过后内部滚动;不传则不限
disabledboolean?整体禁用 + 视觉变灰,优先级高于 editable
containerStyleStyleProp<ViewStyle>?容器外层样式

跟 Input 的区别

维度InputTextarea
行数单行(multiline 已 omit)多行(内置 multiline=true
高度策略height 固定,默认 44[minHeight, maxHeight] 自适应,默认 96
文本对齐居中顶对齐(跨平台统一)
适用场景短文本(用户名 / 手机号 / 验证码)长文本(备注 / 评论 / 反馈)