输入框
Input 组件为用户提供了一个输入和编辑文本的字段。
介绍
输入框是一个接受用户文本数据的 UI 元素。Input 组件取代了原生的 HTML <input> 标签,并提供了扩展的自定义和可访问性功能。它也可以根据需要转换为 <textarea>。
组件
import { Input } from '@mui/base/Input';
Input 的行为类似于原生的 HTML <input>,除了它嵌套在根 <div> 中——详见 结构。
以下演示展示了如何创建和样式化输入组件,包括 placeholder 文本
结构
Input 组件由一个根 <div> 插槽组成,该插槽容纳一个内部 <input> 插槽
<div class="base-Input-root">
<input class="base-Input-input" />
</div>
自定义结构
使用 slots 属性覆盖根插槽或任何其他内部插槽
<Input slots={{ root: 'aside', input: CustomInput }} />
使用 slotProps 属性将自定义属性传递给内部插槽。以下代码片段将一个名为 my-input 的 CSS 类应用于 input 插槽
<Input slotProps={{ input: { className: 'my-input' } }} />
与 TypeScript 一起使用
在 TypeScript 中,您可以将 slots.root 中使用的自定义组件类型指定为非样式化组件的泛型参数。这样,您可以安全地在组件上直接提供自定义根组件的属性
<Input<typeof CustomComponent> slots={{ root: CustomComponent }} customProp />
这同样适用于特定于自定义原始元素的属性
<Input<'textarea'> slots={{ root: 'textarea' }} rows={2} />
Hook
import { useInput } from '@mui/base/useInput';
useInput Hook 让您可以将 Input 的功能应用于完全自定义的组件。它返回要放置在自定义组件上的属性,以及表示组件内部状态的字段。
下面的演示展示了如何使用 useInput Hook 创建一个接收所有必要属性的自定义输入组件
自定义
装饰
您可以使用 startAdornment 和 endAdornment 属性向 Input 添加前缀、后缀或操作。装饰的常见用例包括
- 当 Input 接收到特定的计量单位(如重量或货币)时
- 当图标按钮切换显示/隐藏密码时
以下演示展示了这两种用例的示例
多行
multiline 属性将 <input> 字段转换为 <textarea> 元素,如下所示
如果您希望 <textarea> 随着内容增长,您可以在输入框中使用 Textarea Autosize 组件。
当使用 Textarea Autosize 时,除非您设置 rows 属性,否则 <textarea> 元素的高度会动态匹配其内容。要设置最小和最大尺寸,请添加 minRows 和 maxRows 属性。
以下演示展示了如何将 Textarea Autosize 组件插入到 Input 中,使其高度随着内容长度增长