输入栏输入框
ComposerInput输入与选择输入栏里的输入框:单行 input 或随内容长高的多行 textarea(field-sizing: content)。自带输入法守卫:组合输入、Process 键与 keyCode 229(Safari 确认候选的回车)期间既不提交也不转发按键。
属性
| 名称 | 类型 | 默认值 | 说明 |
|---|---|---|---|
value | Signal<String> | 必填 | 当前文本,由父组件控制。 |
oninput | Callback<String> | 必填 | 文本变化时返回新值。 |
placeholder | String | 必填 | 占位文字。 |
id | Option<String> | None | input 的 id,用于与 label 关联。 |
aria_label | Option<String> | None | 无障碍名称。 |
multiline | bool | false | 多行 textarea;否则单行 input。 |
search | bool | false | 单行搜索框:type=search、name=q、enterkeyhint=search,无脚本时随表单 GET 提交。 |
maxlength | Option<u32> | None | 最大字符数。 |
autofocus | bool | false | 挂载时聚焦。 |
disabled | Signal<bool> | false | 禁用输入。 |
on_submit | Option<Callback<()>> | None | 多行:⌘/Ctrl+Enter 调用;单行:给了就由 Enter 调用并阻止默认,否则交给所在表单原生提交。 |
onkeydown | Option<Callback<KeyboardEvent>> | None | 调用方的其余按键(Escape、↓ 等);输入法组合期间不转发。 |
oncomposition | Option<Callback<bool>> | None | 组合输入开始(true)/ 结束(false)。 |
input_ref | Option<NodeRef<html::Input>> | None | 单行模式下 input 元素的引用,供调用方聚焦或测量。 |
textarea_ref | Option<NodeRef<html::Textarea>> | None | 多行模式下 textarea 元素的引用,供调用方聚焦或测量。 |
键盘
- Enter
- 单行输入提交(给了 on_submit 时)
- ⌘ / Ctrl + Enter
- 多行输入提交
- 输入法组合中
- 不提交,也不转发按键
用法
src/components/ui/composer.rslet text = RwSignal::new(String::new());
view! {
<Composer size=ComposerSize::Sm>
<ComposerInput
multiline=true
placeholder="\u5199\u70B9\u4EC0\u4E48\u2026\uFF08\u2318\u21B5 \u53D1\u9001\uFF09"
value=text
oninput=move |: String| text.set(value)
on_submit=move |()| send()
/>
<ComposerSend label="\u53D1\u9001" onclick=move |_| send()/>
</Composer>
}