如何在 Material UI 中自定义 Chip?


在这篇文章中,我们将学习如何在 Material UI 中自定义芯片。芯片是代表输入、属性或操作的小组件。借助芯片,用户可以输入数据、选择选项、过滤内容或启动流程。

芯片也可以在 React 中的 MUI 中自定义。芯片的自定义可能包括更改芯片颜色、自定义删除图标、添加头像或使用其根属性创建芯片。我们将在本文中了解所有内容。

要使用 MUI 中的芯片,我们需要了解其 API 及其相关的 props。

Chip API

Chip API 用于将芯片添加到 React MUI 中。它带有 props -

  • avatar - 要在芯片上显示头像,我们使用 avatar 属性。

  • classes - 为了自定义组件的样式,我们可以使用 classes 属性。

  • color - 如果您想个性化芯片颜色,可以使用 color 属性。

  • component - component 属性在芯片内渲染根组件。

  • clickable - 使用此属性,我们可以使芯片可点击。按下时触发。

  • deleteIcon - 如果您希望更改芯片组件中的图标,可以使用 deleteIcon 修改它。

  • disabled - 要禁用芯片,只需使用 disabled。

  • icon - 您可以选择使用 icon 属性向芯片添加图标。

  • label - label 属性用于向组件添加内容。

  • onDelete - 要显示删除图标,我们使用 onDelete prop。

  • size - 要调整芯片的大小,请使用此 size prop。

  • skipFocusWhenDisabled - 要在芯片上跳过焦点,请相应地使用 prop。

  • sx - 要为芯片组件添加自定义样式,请使用 sx prop。

  • variant - 如果您希望使用不同的芯片变体,请使用 prop。

自定义芯片所需的步骤

要在 Material UI 中创建自定义芯片组件,请参阅以下步骤 -

步骤 1:创建 React 应用程序

在继续在 MUI 中自定义芯片组件之前,我们需要创建一个 React 应用程序。要创建一个新的 React 应用程序,请在您的终端中运行以下命令 -

npx create react app chipcompproject

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

cd chipcompproject

步骤 2:将 MUI 添加到 React

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

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

步骤 3:创建芯片

要添加或创建芯片,我们使用 <Chip> API 组件,如下面的语法所示 -

const CopyChip = styled(Chip)(() => ({
   //add custom CSS styles below this
   …
})
<Chip label="Click label" />

关于使用芯片操作的步骤就介绍到这里。

示例

在此示例中,我们自定义了芯片组件的填充变体。在这里,我们定义了多个 CSS 属性,如边框、边框半径、颜色等,以将变体更改为填充。此外,我们还添加了带有自定义 CSS 规范(如颜色和大小)的删除图标。

import Chip from "@mui/material/Chip";
import { styled } from "@mui/material/styles"

//Create a custom chip using styled
const MuiChipCustom = styled(Chip)(() => ({
   width: 150, //adding custom css styles
   height: 50,
   backgroundColor: 'lightblue',
   borderRadius: 2,
   color: 'white',   

   '& .MuiChip-label': {
      color: 'blue', //using the MUI chip label properties
      fontSize: 20
   },

   '& .MuiChip-deleteIcon': {
      color: 'blue',
      fontSize: 20
   },
}));

function App() {

   const deleteHandler = () => {
      alert('You just deleted the chip!')
   };

   return (
      <div
         style={{
            padding: 40,
            gap: 10,
            display: 'flex',
            flexDirection: 'row'
         }}>
         <MuiChipCustom label="delete chip" variant="filled" onDelete={deleteHandler} />
         <MuiChipCustom label="delete chip" variant="filled" onDelete={deleteHandler} />
      </div>
   );
};
export default App;

输出

示例

在此示例中,我们自定义了芯片组件的轮廓变体。在这里,我们定义了多个 CSS 属性,如边框、边框半径、颜色等,以将变体更改为轮廓,并且在这里我们也可以从芯片组件中删除 variant prop,因为它仍然可以工作。

import React from "react";
import { Chip } from "@mui/material";
import { styled } from "@mui/material/styles"

const MuiChipCustom = styled(Chip)(() => ({
   border: '2px solid lightblue',
   borderRadius: 25,
   width: 150,
   height: 50,
   color: 'white',   

   '& .MuiChip-label': {
      color: 'lightblue',
      fontSize: 20
   },
}));

const App = () => {
   const handleClick = () => {
      alert('You just clicked the chip!')
   };

   return (
      <div
         style={{
            padding: 40,
            gap: 10,
            display: 'flex',
            flexDirection: 'row'
         }}>
         <MuiChipCustom label="click me" variant="outlined" onClick={handleClick} />
         <MuiChipCustom label="click me" variant="outlined" onClick={handleClick} />
      </div>
   );
};
export default App;

输出

示例

在此示例中,我们自定义了芯片组件中的图标。在这里,我们使用了 &.MuiChip-icon CSS 属性来更改添加到芯片开头的图标的颜色和字体大小,使其成为自定义。

import React from "react";
import { Chip } from "@mui/material";
import { styled } from "@mui/material/styles"
import { Clear, Delete, DeleteForever, Done } from "@mui/icons-material";

const MuiChipCustom = styled(Chip)(() => ({
   border: '2px solid green',
   borderRadius: 25,
   width: 150,
   height: 50,
   color: 'white',   

   '& .MuiChip-label': {
      color: 'green',
      fontSize: 20,
   },

   '& .MuiChip-icon': {
      color: 'green',
      fontSize: 30
   },
}));

function App() {

   const handleClick = () => {
      alert('You just clicked the chip!')
   };

   return (
      <div
         style={{
            padding: 40,
            gap: 10,
            display: 'flex',
            flexDirection: 'row'
         }}>
         <MuiChipCustom icon={<Done />} label="click me" variant="outlined" onClick={handleClick} />
         <MuiChipCustom icon={<Delete />} label="click me" variant="outlined" onClick={handleClick} />
         <MuiChipCustom icon={<DeleteForever />} label="click me" variant="outlined" onClick={handleClick} />
         <MuiChipCustom icon={<Clear />} label="click me" variant="outlined" onClick={handleClick} />
      </div>
   );
};

export default App;

输出

示例

在此示例中,我们对芯片组件中的头像进行了一些更改。我们利用 &.MuiChip avatar CSS 属性调整芯片中头像的大小并赋予其外观。

import React from "react";
import { Avatar, Chip } from "@mui/material";
import { styled } from "@mui/material/styles"

const MuiChipCustom = styled(Chip)(() => ({
   border: '2px solid green',
   borderRadius: 25,
   width: 200,
   height: 50,
   color: 'white',   

   '& .MuiChip-label': {
      color: 'green',
      fontSize: 20,
   },

   '& .MuiChip-avatar': {
      width: 40,
      height: 40
   },

}));

function App() {

   const handleClick = () => {
      alert('You just clicked the chip!')
   };

   return (
      <div
         style={{
            padding: 40,
            gap: 10,
            display: 'flex',
            flexDirection: 'row'
         }}>
         <MuiChipCustom avatar={<Avatar alt="tp" src="https://play-lh.googleusercontent.com/F10OOHNkeNbOf5x9DYpoihAIkLRlSMxCsPHyCErXgm0oM2gZtJwVymJIZoN59v4JJWBZ" />} label="tutorialspoint" variant="outlined" onClick={handleClick} />
         <MuiChipCustom avatar={<Avatar alt="tp" src="https://play-lh.googleusercontent.com/F10OOHNkeNbOf5x9DYpoihAIkLRlSMxCsPHyCErXgm0oM2gZtJwVymJIZoN59v4JJWBZ" />} label="tutorialspoint" variant="outlined" onClick={handleClick} />
         <MuiChipCustom avatar={<Avatar alt="tp" src="https://play-lh.googleusercontent.com/F10OOHNkeNbOf5x9DYpoihAIkLRlSMxCsPHyCErXgm0oM2gZtJwVymJIZoN59v4JJWBZ" />} label="tutorialspoint" variant="outlined" onClick={handleClick} />
         <MuiChipCustom avatar={<Avatar alt="tp" src="https://play-lh.googleusercontent.com/F10OOHNkeNbOf5x9DYpoihAIkLRlSMxCsPHyCErXgm0oM2gZtJwVymJIZoN59v4JJWBZ" />} label="tutorialspoint" variant="outlined" onClick={handleClick} />
      </div>
   );
};
export default App;

输出

结论

总而言之,在本文中,我们探讨了如何在 React MUI 中个性化芯片组件。我们介绍了实现这些自定义的所有步骤,包括修改删除图标、背景颜色和不同变体等示例。

更新于: 2023-10-31

2K+ 阅读量

开启您的 职业生涯

通过完成课程获得认证

立即开始
广告