输入栏输入框

ComposerInput输入与选择

输入栏里的输入框:单行 input 或随内容长高的多行 textarea(field-sizing: content)。自带输入法守卫:组合输入、Process 键与 keyCode 229(Safari 确认候选的回车)期间既不提交也不转发按键。

预览

属性

名称类型默认值说明
valueSignal<String>必填当前文本,由父组件控制。
oninputCallback<String>必填文本变化时返回新值。
placeholderString必填占位文字。
idOption<String>Noneinput 的 id,用于与 label 关联。
aria_labelOption<String>None无障碍名称。
multilineboolfalse多行 textarea;否则单行 input。
searchboolfalse单行搜索框:type=search、name=q、enterkeyhint=search,无脚本时随表单 GET 提交。
maxlengthOption<u32>None最大字符数。
autofocusboolfalse挂载时聚焦。
disabledSignal<bool>false禁用输入。
on_submitOption<Callback<()>>None多行:⌘/Ctrl+Enter 调用;单行:给了就由 Enter 调用并阻止默认,否则交给所在表单原生提交。
onkeydownOption<Callback<KeyboardEvent>>None调用方的其余按键(Escape、↓ 等);输入法组合期间不转发。
oncompositionOption<Callback<bool>>None组合输入开始(true)/ 结束(false)。
input_refOption<NodeRef<html::Input>>None单行模式下 input 元素的引用,供调用方聚焦或测量。
textarea_refOption<NodeRef<html::Textarea>>None多行模式下 textarea 元素的引用,供调用方聚焦或测量。

键盘

Enter
单行输入提交(给了 on_submit 时)
⌘ / Ctrl + Enter
多行输入提交
输入法组合中
不提交,也不转发按键

用法

src/components/ui/composer.rs
Leptos view!
let 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 |value: String| text.set(value)
            on_submit=move |()| send()
        />
        <ComposerSend label="\u53D1\u9001" onclick=move |_| send()/>
    </Composer>
}