如何在Material UI中使用输入装饰(Input Adornments)向TextField添加图标?


在本文中,我们将学习如何在Material UI中使用输入装饰(input adornments)向文本字段添加图标。但在学习如何使用输入装饰向文本字段添加图标之前,我们必须了解什么是输入装饰?输入装饰只不过是添加到文本字段的额外文本或图标。它们位于三个不同的位置,包括前缀、后缀和操作。

InputAdornment API

  • <InputAdornment> - 此API用于在React MUI中的输入元素添加前缀、后缀或操作。

属性

  • position − 此属性用于将输入装饰位置设置为末尾或开头。

  • children − 此属性用于添加子组件和/或IconButton组件。

  • classes − 此属性允许您自定义或向组件添加样式。

  • component − 此属性用于根节点。

  • disablePointerEvents − 此属性用于禁用根元素的指针事件。

  • disableTypography − 此属性用于禁用包装Typography组件(仅当子元素为字符串类型时)。

  • sx − 此属性用于在Material UI中添加样式。

  • variant − 此属性用于添加不同的变体,例如标准、填充或轮廓。

向TextField添加图标的步骤

以下是使用其各自语法在Material UI中添加图标以及输入装饰的步骤:

步骤1:创建React应用程序

在我们进一步添加图标作为输入装饰之前,我们必须拥有一个React应用程序。要创建一个新的React应用程序,请在您的终端中运行以下命令:

npx create react app sliderproject

项目创建完成后,运行以下命令导航到其目录:

cd sliderproject

步骤2:安装Material UI

创建React应用程序后,是时候将Material UI安装到React应用程序中了。要安装MUI,请运行以下命令:

npm install @mui/material @emotion/react @emotion/styled

步骤3:使用TextField添加图标

现在,让我们使用输入装饰导入并添加带有TextField的图标。要在文本字段或普通输入组件中添加装饰,我们使用MUI中的InputAdornment组件。以下是该组件与输入组件一起使用的示例。

<Input
   id="input-with-adorn"
   endAdornment={
      <InputAdornment position="position">
         <IconComponent color=”red” />
      </InputAdornment>
   }
/>

步骤4:运行项目

要运行React MUI应用程序,请在终端中运行以下命令:

npm run start

就是这样!现在我们已经成功学习了在MUI中使用输入装饰向文本字段添加图标的步骤。

示例

在这个示例中,我们创建了电子邮件和密码输入字段。在这里,我们将图标与文本字段添加为前缀输入装饰,或者可以说是在输入组件的开头。

import React from "react";
import { FormControl, Input, InputAdornment, InputLabel } from "@mui/material";
import { Mail, PasswordOutlined } from "@mui/icons-material";

const App = () => {

   return (
      <div style={{
         padding: 40,
         width: '70%',
         display: 'flex',
         flexDirection: 'column',
         gap: 20
      }}>
         <FormControl variant="standard">
            <InputLabel htmlFor="label-suffix-adornment">
               Enter your email
            </InputLabel>
            <Input
               id="suffix-adornment"
               placeholder="Enter your email"
               startAdornment={
                  <InputAdornment position="start">
                     <Mail color="info" />
                  </InputAdornment>
               }
            />
         </FormControl>
         <FormControl variant="standard">
            <InputLabel htmlFor="label-suffix-adornment">
               Enter your password
            </InputLabel>
            <Input
               id="suffix-adornment"
               placeholder="Enter your password"
               startAdornment={
                  <InputAdornment position="start">
                     <PasswordOutlined color="info" />
                  </InputAdornment>
               }
            />
         </FormControl>
      </div>
   );
};
export default App;

输出

示例

在这个示例中,我们也创建了电子邮件和密码输入字段。但是在这里,我们将图标与文本字段添加为后缀输入装饰,或者可以说是在输入组件的结尾。

import React from "react";
import { FormControl, Input, InputAdornment, InputLabel } from "@mui/material";
import { Mail, PasswordOutlined } from "@mui/icons-material";

const App = () => {

   return (
      <div style={{
         padding: 40,
         width: '70%',
         display: 'flex',
         flexDirection: 'column',
         gap: 20
      }}>
         <FormControl variant="standard">
            <InputLabel htmlFor="label-prefix-adornment">
               Enter your email
            </InputLabel>
            <Input
               id="prefix-adornment"
               placeholder="Enter your email"
               endAdornment={
                  <InputAdornment position="end">
                     <Mail color="info" />
                  </InputAdornment>
               }
            />
         </FormControl>
         <FormControl variant="standard">
            <InputLabel htmlFor="label-prefix-adornment">
               Enter your password
            </InputLabel>
            <Input
               id="prefix-adornment"
               placeholder="Enter your password"
               endAdornment={
                  <InputAdornment position="end">
                     <PasswordOutlined color="info" />
                  </InputAdornment>
               }
            />
         </FormControl>
      </div>
   );
};
export default App;

输出

示例

在这个示例中,我们创建了电子邮件和密码输入字段。但是在这里,我们为密码输入字段创建了一个操作。当用户在输入字段中输入密码并想要查看密码时,按钮中的可见性图标允许他们查看密码,因为它会隐藏或显示文本字段输入中的文本。

import React from "react";
import { FilledInput, FormControl, IconButton, Input, InputAdornment, InputLabel } from "@mui/material";
import { Mail, VisibilityOffOutlined, VisibilityOutlined } from "@mui/icons-material";
import { useState } from "react";

const App = () => {
   const [psw, setPsw] = useState(false);
   const handleShowPsw = () => setPsw((show) => !show);
   const handleHidePsw = (e) => {
      e.preventDefault();
   };

   return (
      <div style={{
         padding: 40,
         width: '70%',
         display: 'flex',
         flexDirection: 'column',
         gap: 20
      }}>
         <FormControl variant="outlined">
            <InputLabel htmlFor="label-prefix-adornment">
               Enter your email
            </InputLabel>
            <Input
               id="suffix-adornment"
               placeholder="Enter your email"
               startAdornment={
                  <InputAdornment variant="outlined" position="start">
                     <Mail color="info" />
                  </InputAdornment>
               }
            />
         </FormControl>
         <FormControl variant="outlined">
            <InputLabel htmlFor="label-prefix-adornment">
               Enter your password
            </InputLabel>
            <FilledInput
               type={psw ? 'text' : 'password'}
               endAdornment={
                  <InputAdornment position="start">
                     <IconButton
                        onClick={handleShowPsw}
                        onMouseDown={handleHidePsw}
                        edge="end"
                     >
                        {psw ? <VisibilityOffOutlined /> : <VisibilityOutlined />}
                     </IconButton>
                  </InputAdornment>
               }
            />
         </FormControl>
      </div>
   );
};
export default App;

输出

示例

在这个示例中,我们向输入文本字段添加了前缀和后缀。startAdornment和endAdornment属性允许用户添加这些装饰。此处开头和结尾的图标充当前缀和后缀。

import React from "react";
import { FormControl, Input, InputAdornment, InputLabel } from "@mui/material";
import { Mail, PasswordOutlined } from "@mui/icons-material";

const App = () => {
   return (
      <div style={{
         padding: 40,
         width: '80%',
         display: 'flex',
         flexDirection: 'column',
         gap: 20
      }}>
      <FormControl variant="outlined">
         <InputLabel htmlFor="label-prefix-adornment">
            Enter your email
         </InputLabel>
         <Input
            id="suffix-adornment"
            placeholder="Enter your email"
            startAdornment={
               <InputAdornment variant="outlined" position="start">
                  <Mail color="info" />
               </InputAdornment>
            }
         />
      </FormControl>
      <FormControl variant="standard">
         <InputLabel htmlFor="label-prefix-adornment">
            Enter your password
         </InputLabel>
         <Input
            id="prefix-adornment"
            placeholder="Enter your password"
            endAdornment={
               <InputAdornment position="end">
                  <PasswordOutlined color="info" />
               </InputAdornment>
            }
         />
      </FormControl>
      </div>
   );
};
export default App;

输出

结论

在本文中,我们学习了在MUI中使用输入装饰向文本字段添加图标的完整分步过程。我们已经看到了使用的API及其相关的属性,以便将图标添加为输入装饰。除此之外,我们还看到了多个示例及其输出,例如添加前缀或后缀装饰、向装饰添加操作以及同时使用两者。这些输入装饰有助于提供良好的用户界面,并帮助用户轻松识别输入字段中需要填写哪种类型的输入。

更新于:2023年10月30日

1K+ 浏览量

启动您的职业生涯

通过完成课程获得认证

开始学习
广告