Skyroc UI
输入

Textarea

用于收集多行文本并支持尺寸、字数统计和自定义计数展示的文本域组件

Textarea 用于收集评论、备注、描述等多行文本。组件基于原生 <textarea> 封装,保留常用原生属性透传,并提供统一尺寸、受控状态和可选字数统计。

import { Textarea, TextareaContent, TextareaCount, TextareaRoot } from '@skyroc/web-ui';

何时使用

  • 需要输入多行文本,如备注、评论、问题描述、长文本表单项。
  • 需要显示当前输入长度,或配合 maxLength 给用户明确的输入限制反馈。
  • 需要按项目统一尺寸体系调整文本域高度、字号和内边距。
  • 只收集单行文本时优先使用 Input;需要富文本编辑时不适合使用 Textarea。

基础用法

Textarea 支持原生 textarea 属性,placeholderdisabledreadOnlynamerequired 等属性会透传到底层 <textarea>

Preview
Code
Loading...
<Textarea placeholder="请输入内容" />

字数统计

通过 showCount 显示字数统计。默认统计 String(value).length,没有 maxLength 时只显示当前数量。

Preview
Code
Loading...
<Textarea showCount />

最大长度

通过原生 maxLength 限制输入长度,并在开启 showCount 后显示 当前数量 / 最大长度

Preview
Code
Loading...
<Textarea showCount maxLength={200} />

自定义统计内容

通过 countRender 自定义统计区域的渲染内容。countRender 接收组件格式化后的统计文本。

Preview
Code
Loading...
<Textarea showCount countRender={count => <span>{count}</span>} />

字符簇计数

通过 countGraphemes 自定义计数逻辑,适合 emoji、组合字符等需要按用户可见字符统计的场景。

Preview
Code
Loading...
<Textarea
  showCount
  countGraphemes={value =>
    Array.from(new Intl.Segmenter(undefined, { granularity: 'grapheme' }).segment(String(value ?? ''))).length
  }
/>

尺寸

通过 size 调整文本域的最小高度、字号、内边距和计数位置,从 xs2xl 共 6 个尺寸。

尺寸最小高度字号适用场景
xs24px10px紧凑表单、表格内嵌
sm28px12px辅助说明、侧边栏
md32px14px常规场景(默认)
lg36px16px重点表单项
xl40px18px大号输入区域
2xl48px20px大幅文本输入
Preview
Code
Loading...

自定义样式

通过 classNames 分别控制 rootcontentcount 三个 slot。className 作为原生 textarea 属性会传给内容元素;如果需要精细控制外层容器或计数区域,优先使用 classNames

Preview
Code
Loading...
<Textarea
  showCount
  classNames={{
    root: 'max-w-md',
    content: 'min-h-32',
    count: 'text-primary'
  }}
/>

API

Textarea

通用属性参考:继承原生 textarea 属性,并增加字数统计、项目尺寸和 slot class 配置。

属性说明类型默认值
value受控输入值string | number | readonly string[]-
defaultValue非受控模式下的默认值string | number | readonly string[]-
onChange输入值变化时触发的原生 change 事件回调(event) => void-
onTextChange输入值变化时触发,接收更新后的文本值(value: string | number | readonly string[] | undefined) => void-
placeholder占位文本string-
disabled是否禁用文本域boolean-
readOnly是否只读boolean-
maxLength最大输入长度;开启 showCount 后会参与统计文本展示number-
showCount是否显示字数统计booleanfalse
countRender自定义统计内容渲染函数,接收格式化后的统计文本(count: string) => ReactNode-
countGraphemes自定义计数函数,用于覆盖默认字符串长度统计(input: string | number | readonly string[] | undefined) => number-
size尺寸,影响最小高度、字号、内边距和计数位置'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl''md'
className底层 textarea 的自定义 classClassValue-
classNames各 slot 的自定义 class(root / content / count)TextareaClassNames-
name表单字段名称string-
required是否必填boolean-
autoComplete浏览器自动完成策略string-
autoFocus是否自动聚焦boolean-

TextareaRoot

外层容器组件,继承原生 div 属性。

属性说明类型默认值
className外层容器的自定义 classClassValue-
size尺寸,用于设置 data-size 并参与 root slot 变体计算'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl''md'

TextareaContent

底层内容组件,继承原生 textarea 属性。

属性说明类型默认值
className底层 textarea 的自定义 classClassValue-
size尺寸,影响最小高度、字号和内边距'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl''md'
valuetextarea 当前值string | number | readonly string[]-
maxLength最大输入长度number-

TextareaCount

统计展示组件,继承原生 div 属性,但 children 被定义为统计文本渲染函数。

属性说明类型默认值
value用于统计的 textarea 当前值string | number | readonly string[]-
maxLength最大输入长度;存在时展示为 当前数量 / 最大长度number-
children自定义统计内容渲染函数(count: string) => ReactNode-
countGraphemes自定义计数函数(input: string | number | readonly string[] | undefined) => number-
className统计区域的自定义 classClassValue-
size尺寸,影响统计区域字号和定位'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl''md'

类型

TextareaProps

Textarea 主组件属性。继承原生 textarea 属性,并增加字数统计、项目尺寸和 slot class 配置。

字段类型说明
autoCompletestring浏览器自动完成策略。
autoFocusboolean是否自动聚焦。
classNameClassValue底层 textarea 的自定义 class。
classNamesTextareaClassNames各 slot 的自定义 class。
countGraphemes(input: string | number | readonly string[] | undefined) => number自定义计数函数。
countRender(count: string) => ReactNode自定义统计内容渲染函数。
defaultValuestring | number | readonly string[]非受控默认值。
disabledboolean是否禁用。
maxLengthnumber最大输入长度。
namestring表单字段名称。
onChange(event) => void原生 change 事件回调。
onTextChange(value: string | number | readonly string[] | undefined) => void文本值变化回调。
placeholderstring占位文本。
readOnlyboolean是否只读。
requiredboolean是否必填。
size'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl'组件尺寸。来自 StyledComponentProps。
showCountboolean是否显示字数统计。
valuestring | number | readonly string[]受控输入值。
...textareaPropstextarea element props without native className其他原生 textarea 属性。

TextareaClassNames

各 slot 的自定义 class,用于精细化控制 Textarea 各部分样式。

字段类型说明
rootClassValue外层容器的 class。
contentClassValue底层 textarea 的 class。
countClassValue统计区域的 class。

TextareaContentProps

底层 textarea 子组件属性,继承原生 textarea 属性并支持项目尺寸。

字段类型说明
classNameClassValue自定义 class。
maxLengthnumber最大输入长度。
size'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl'组件尺寸。
valuestring | number | readonly string[]textarea 当前值。
...textareaPropstextarea element props without native className其他原生 textarea 属性。

TextareaCountProps

统计展示子组件属性,继承原生 div 属性并使用函数式 children 渲染统计文本。

字段类型说明
children(count: string) => ReactNode自定义统计内容渲染函数。
classNameClassValue自定义 class。
countGraphemes(input: string | number | readonly string[] | undefined) => number自定义计数函数。
maxLengthnumber最大输入长度。
size'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl'组件尺寸。
valuestring | number | readonly string[]用于统计的当前值。
...divPropsdiv element props without native className and children其他原生 div 属性。

TextareaRootProps

外层容器子组件属性,继承原生 div 属性并支持项目尺寸。

字段类型说明
classNameClassValue自定义 class。
size'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl'组件尺寸。
...divPropsdiv element props without native className其他原生 div 属性。

StyledComponentProps<T>

项目内用于包装组件 props 的通用类型。

字段类型说明
...sourcePropsinherited props without className继承原始组件属性,但重新定义 className。
classNameClassValue组件 class。
size'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl'项目统一尺寸类型。

ClassValue

CSS 类名类型

string | null | undefined | Record<string, boolean> | ClassValue[]

On this page