定价

提供多行文本输入,可承接原生表单属性并组合字段反馈,适合描述、备注和较长内容的编辑。

我们正在让 SnowUI 组件成为 AI 对话中可直接操作的界面。目前对话交互能力仍在建设中;本页展示网站用法,支持的对话平台与组件版本将在验证后公布。 AI 对话内生成和使用 SnowUI 界面完全免费,不属于项目,不占项目或开发者席位额度,无需 SnowUI 注册、激活或付费证明。

如何使用

用于多行文本输入,单行用 Input。标签、帮助和错误组合 Field;不要把普通展示文本放进只读输入框来模拟布局。

  • bind:value 同步文本;defaultValue 只在 value 未定义时回退,表单重置需恢复绑定值。

  • resize 控制调整方向;readonly / disabled 或 resize="none" 时不提供调节手柄。name 用于表单提交。

导入

import { Textarea } from '@snowui-design-system/components';

用法

草稿

反馈表单

字符计数

输入限制

只读状态

禁用状态

调整尺寸

长内容

地址

加载中

事件

API 参考

属性 类型 默认值 示例 描述
value string — bind:value={draft} 当前文本,支持 bind:value。显式值优先于 defaultValue;输入与 change 时先同步绑定值,再调用对应事件回调。
defaultValue string — defaultValue="SnowUI release notes" value 为 undefined 时的回退文本;首次输入后由 value 接管。它不是独立的原生 reset 协议;受控表单需要在 onreset 中恢复绑定初值。
placeholder string — placeholder="Share feedback on the docs…" 空值时的多行提示,可包含换行;不能代替可访问标签。
maxCount number — maxCount={100} 建议字符上限,只驱动计数器和 exceeded,不阻止输入。以 JavaScript string.length 计数(UTF-16 代码单元);hover 到组件时显示计数,不再使用 80% 阈值;严格超过上限时变红且持续显示。建议使用正整数;硬性输入限制另设 maxlength。
exceeded boolean false bind:exceeded={exceeded} 由当前文本长度是否严格超过 maxCount 自动计算;支持 bind:exceeded 读取结果。未设置 maxCount 时为 false,传入值会被计算结果覆盖;不会自动设置 invalid。
name string — name="feedback" 原生表单字段名,提交时按此名称读取文本;禁用字段不进入 FormData。
disabled boolean false disabled 禁用输入、原生表单提交与 Tab 聚焦,同时关闭缩放手柄;保留可见内容。
readonly boolean false readonly 只读,保留聚焦、选择、复制与具名表单提交;关闭缩放手柄,忽略 rows,并使用只读内容布局。
required boolean false required 启用原生必填校验;自定义反馈文案由调用方或 Field 提供。
rows number 2 rows={6} 传给原生 textarea 的可见行数提示,使用正整数;readonly 时不传递。组件挂载、输入和外部值变化时还会按内容测高,因此它不锁定最终高度。
cols number — cols={32} 传给原生 textarea 的字符列数提示,使用正整数;组件默认占满容器宽度,因此它不直接决定外壳宽度。配合 wrap="hard" 可影响提交时的换行。
minlength number — minlength={20} 原生最小文本长度约束,按 UTF-16 代码单元计数;不阻止输入。空值需要另设 required;浏览器约束校验与组件 invalid 独立。
maxlength number — maxlength={100} 原生最大输入长度约束,按 UTF-16 代码单元计数;浏览器通常限制用户继续输入,但不会截断外部赋给 value / defaultValue 的文本。与 maxCount 分别控制输入限制和计数提示。
wrap HTMLTextareaAttributes["wrap"] — <Textarea wrap="soft" /> <Textarea wrap="hard" cols={32} /> <Textarea wrap="off" /> 原生换行策略:soft 在视觉上换行但不为提交补换行;hard 可按列宽为提交内容补换行;off 不自动折行。未设置使用浏览器默认 soft;组件未提供水平滚动条,长行编辑优先使用 soft。
spellcheck boolean — spellcheck={false} 传递浏览器拼写检查开关;未设置遵循浏览器与继承环境,实际词典由浏览器提供。
autocomplete HTMLTextareaAttributes["autocomplete"] — autocomplete="street-address" 原生自动填充提示,例如 street-address;候选依赖浏览器保存的数据,不由组件提供。
enterkeyhint HTMLTextareaAttributes["enterkeyhint"] — enterkeyhint="done" 移动端回车键标签提示,例如 done / enter / next;不绑定提交或跳转动作,呈现由输入法决定。
inputmode HTMLTextareaAttributes["inputmode"] — inputmode="text" 软键盘模式提示,例如 text / numeric;不改变字符串值类型,也不自动校验输入格式。
form string — form="feedback-form" 关联同一文档内指定 id 的原生 form,使位于表单 DOM 外的文本域仍参与该表单提交。
autofocus boolean — autofocus 传给原生 textarea 的自动聚焦请求;是否执行由浏览器决定,建议在用户主动打开编辑区域时使用。
tabindex number — tabindex={0} 原生 Tab 顺序;0 使用自然顺序,-1 跳过顺序导航但允许主动聚焦,正数指定优先级。普通表单建议保留自然顺序。
title string — title="Review comment" 原生提示文本;浏览器决定如何显示,不替代可见标签或错误信息。
id string — id="documentation-feedback" 内部原生 textarea 的 id,用于 label for 和 ARIA 引用;同一文档内保持唯一。
resize "none" | "vertical" | "horizontal" | "both" "both" resize="both" 缩放方向:none 隐藏手柄,vertical 调整高度,horizontal 调整宽度,both 同时调整两者。readonly / disabled 强制使用 none;手柄默认最小宽 120px、高 60px。手动设置高度后停止自动内容测高。
invalid boolean false invalid 与 aria-invalid 合并为组件错误态;不会自动检查 required / minlength / maxCount,也不会自动聚焦。嵌入 Field 后由 Field 汇总视觉反馈。
parts ComponentPartsOf<{ Indicator: typeof Indicator }> — parts={{ Indicator: { step: 4, maxHeight: 160 } }} 配置内置 Indicator,例如 step / largeStep 键盘步长、maxWidth / maxHeight 边界和 ariaLabel。只作用于组件生成的手柄;resize=none、readonly 或 disabled 时无手柄可配置。
onclick (event: MouseEvent) => void — onclick={record} 单击内部原生文本域时触发。参数为原生事件,currentTarget 为内部 textarea;返回值被忽略,需要取消可取消的默认行为时调用 event.preventDefault()。
ondblclick (event: MouseEvent) => void — ondblclick={record} 双击内部原生文本域时触发。参数为原生事件,currentTarget 为内部 textarea;返回值被忽略,需要取消可取消的默认行为时调用 event.preventDefault()。
oninput (event: Event) => void — oninput={record} 用户输入改变内容时触发;调用前已同步绑定 value。参数为原生事件,currentTarget 为内部 textarea;返回值被忽略,需要取消可取消的默认行为时调用 event.preventDefault()。
onchange (event: Event) => void — onchange={record} 用户提交本次编辑时触发,通常在值改变后失焦;调用前已同步绑定 value。参数为原生事件,currentTarget 为内部 textarea;返回值被忽略,需要取消可取消的默认行为时调用 event.preventDefault()。
onfocus (event: FocusEvent) => void — onfocus={record} 内部文本域获得焦点时触发。参数为原生事件,currentTarget 为内部 textarea;返回值被忽略,需要取消可取消的默认行为时调用 event.preventDefault()。
onblur (event: FocusEvent) => void — onblur={record} 内部文本域失去焦点时触发。参数为原生事件,currentTarget 为内部 textarea;返回值被忽略,需要取消可取消的默认行为时调用 event.preventDefault()。
onkeydown (event: KeyboardEvent) => void — onkeydown={record} 按下键盘按键时触发,可读取 key 等字段。参数为原生事件,currentTarget 为内部 textarea;返回值被忽略,需要取消可取消的默认行为时调用 event.preventDefault()。
onkeyup (event: KeyboardEvent) => void — onkeyup={record} 释放键盘按键时触发,可读取 key 等字段。参数为原生事件,currentTarget 为内部 textarea;返回值被忽略,需要取消可取消的默认行为时调用 event.preventDefault()。
onkeypress (event: KeyboardEvent) => void — onkeypress={record} 浏览器派发旧式 keypress 时触发;此原生事件已弃用,新代码优先使用 onkeydown。参数为原生事件,currentTarget 为内部 textarea;返回值被忽略,需要取消可取消的默认行为时调用 event.preventDefault()。
onpaste (event: ClipboardEvent) => void — onpaste={record} 粘贴时触发,可通过 clipboardData 读取此次剪贴板内容。参数为原生事件,currentTarget 为内部 textarea;返回值被忽略,需要取消可取消的默认行为时调用 event.preventDefault()。
oncopy (event: ClipboardEvent) => void — oncopy={record} 复制选中文字时触发,可通过 clipboardData 设置此次复制内容。参数为原生事件,currentTarget 为内部 textarea;返回值被忽略,需要取消可取消的默认行为时调用 event.preventDefault()。
oncut (event: ClipboardEvent) => void — oncut={record} 剪切选中文字时触发,可通过 clipboardData 设置此次剪切内容。参数为原生事件,currentTarget 为内部 textarea;返回值被忽略,需要取消可取消的默认行为时调用 event.preventDefault()。