如何在 Material UI 中处理切换按钮的多选?


在本文中,我们将处理 Material UI 中切换按钮的多选。为了确保用户体验流畅且易于理解,在切换按钮组中处理多个切换按钮的选择需要仔细实现。

什么是切换按钮?

切换按钮不仅在 MUI 中,而且在 Bootstrap 等各种其他 CSS 框架中都是非常流行的组件,它提供了一种在两个或多个选项之间进行选择的方法。在 MUI 中,这些按钮统称为 ToggleButtonGroup。一组连接的切换按钮应该通过共享一个容器来突出显示。当赋予其自己的 value 属性时,ToggleButtonGroup 会调节构成其子元素的按钮的选择状态。

ToggleButton API

ToggleButton API 用于将切换按钮集成到 React MUI 中。它带有以下属性 -

  • value - 它是必不可少的,因为它建立了按钮与其选择状态之间的联系。

  • children - 我们可以使用“children”属性在切换按钮中添加任何所需的内容。

  • classes - classes 属性用于覆盖组件的样式。

  • color - color 属性用于添加不同的切换按钮颜色。

  • disabled - 通过设置此属性,我们可以禁用切换按钮功能。

  • disableFocusRipple - disabledFocusRipple 属性用于禁用键盘焦点波纹效果。

  • fullWidth - fullWidth 属性用于为切换按钮添加全宽。

  • onChange - 它允许您定义一个回调函数,该函数在触发时会更改按钮状态。

  • onClick - 使用 onClick 属性指定在单击按钮时执行的回调函数。

  • selected - selected 属性用于呈现活动的切换状态。

  • size - size 属性用于更改切换按钮的大小。

  • sx - 要为此组件添加自定义样式,请使用“sx”属性。

多选所需步骤

以下是处理 Material UI 中切换按钮的多选步骤 -

步骤 1:创建 React 应用程序

在 MUI 中处理切换按钮的多选的第一步是创建一个 React 应用程序。要创建一个新的 React 应用程序,请在您的终端中运行以下命令 -

npx create react app togglebuttonsproject

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

cd togglebuttonsproject

步骤 2:将 MUI 添加到 React

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

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

步骤 3:创建处理程序

为了管理选择,在 React MUI 中,我们将首先使用 hook 设置状态。然后,我们将创建一个函数来处理选择并跟踪切换按钮的状态。以下是如何执行此操作的示例 -

const [multiple, setMultiple] = useState(() => ['icon1', 'icon2']);
const handleMultiple = (e, newMultiple) => {
   setMultiple(newMultiple);
};

步骤 4:渲染函数

创建函数后,我们现在将在我们的 ToggleButtonGroup 组件中使用它。

<ToggleButtonGroup value={multiple} onChange={handleMultiple} >
   <ToggleButton value="bold" aria-label="github">
      <GitHub />
   </ToggleButton>
   …
   //Add more toggle buttons here
   …
</ToggleButtonGroup>

示例

在此示例中,我们创建了一个基本的切换按钮,它处理 MUI 中的多选。在这里,用户可以同时选择或选中多个切换按钮。当按钮被选中时,按钮的背景颜色会被突出显示,反之亦然。

import { useState } from "react";
import React from "react";
import { ToggleButton, ToggleButtonGroup } from "@mui/material";
import { Facebook, GitHub, Instagram, Mail } from "@mui/icons-material";

// App.js main function
export default function App() {

   const [multiple, setMultiple] = useState(() => ['github', 'facebook']);

   const handleMultiple = (e, newMultiple) => {
      setMultiple(newMultiple);
   };

   return (
      <div
         style={{
            padding: 40,
            display: "flex",
            flexDirection: "column",
            gap: 20,
         }}>
         <ToggleButtonGroup
            value={multiple}
            onChange={handleMultiple}
            aria-label="social media icons"
            >
            <ToggleButton value="bold" aria-label="github">
               <GitHub />
            </ToggleButton>
            <ToggleButton value="italic" aria-label="facebook">
               <Facebook />
            </ToggleButton>
            <ToggleButton value="underlined" aria-label="instagram">
               <Instagram />
            </ToggleButton>
            <ToggleButton value="color" aria-label="mail" disabled>
               <Mail />
            </ToggleButton>
         </ToggleButtonGroup>
      </div>
   );
};

输出

示例

在此示例中,我们创建了一个垂直对齐的切换按钮,它处理 MUI 中的多选。在这里,用户可以同时在垂直多个切换按钮之间进行选择。当按钮被选中时,按钮的背景颜色会被突出显示,反之亦然。

import React from "react";
import { ToggleButton, ToggleButtonGroup } from "@mui/material";
import { useState } from "react";
import { Facebook, GitHub, Instagram, Mail } from "@mui/icons-material";

export default function App() {
   const [multiple, setMultiple] = useState(() => ['github', 'facebook']);
   const handleMultiple = (e, newMultiple) => {
      setMultiple(newMultiple);
   };

   return (
      <div
         style={{
            padding: 40,
            display: "flex",
            flexDirection: "column",
            gap: 20,
         }}>
         <ToggleButtonGroup
            value={multiple}
            onChange={handleMultiple}
            sx={{ width: 100}}
            aria-label="social media icons vertical"
            orientation="vertical"
            >
            <ToggleButton value="bold" aria-label="github">
               <GitHub />
            </ToggleButton>
            <ToggleButton value="italic" aria-label="facebook">
               <Facebook />
            </ToggleButton>
            <ToggleButton value="underlined" aria-label="instagram">
               <Instagram />
            </ToggleButton>
            <ToggleButton value="color" aria-label="mail" disabled>
               <Mail />
            </ToggleButton>
         </ToggleButtonGroup>
      </div>
   );
};

输出

示例

在此示例中,我们创建了不同尺寸的切换按钮组,例如小、中和大,并且可以在 MUI 中处理多选。在这里,用户可以选择同时选中不同尺寸的多个切换按钮。当按钮被选中时,按钮的背景颜色会被突出显示,反之亦然。

import React from "react";
import { ToggleButton, ToggleButtonGroup } from "@mui/material";
import { Facebook, GitHub, Instagram, Mail } from "@mui/icons-material";
import { useState } from "react";

const App = () => {

   const [multiple, setMultiple] = useState(() => ['github', 'facebook']);

   const handleMultiple = (e, newMultiple) => {
      setMultiple(newMultiple);
   };

   return (
      <div
         style={{
            padding: 40,
            display: "flex",
            flexDirection: "column",
            gap: 20,
         }}>
         <ToggleButtonGroup
            value={multiple}
            onChange={handleMultiple}s
            aria-label="social media icons vertical"
            >
            <ToggleButton value="bold" aria-label="github" size="small">
               <GitHub />
            </ToggleButton>
            <ToggleButton value="italic" aria-label="facebook" size="medium">
               <Facebook />
            </ToggleButton>
            <ToggleButton value="underlined" aria-label="instagram" size="large">
               <Instagram />
            </ToggleButton>
            <ToggleButton value="color" aria-label="mail"  disabled>
               <Mail />
            </ToggleButton>
         </ToggleButtonGroup>
      </div>
   );
};

export default App;

输出

示例

在此示例中,我们创建了自定义切换按钮,它处理 MUI 中的多选。在这里,切换按钮的背景颜色和边框半径已使用 ToggleButton 的 MuiToggleButtonGroup-grouped 属性进行了更改,该属性允许自定义切换按钮。

import React from "react";
import { ToggleButton, ToggleButtonGroup } from "@mui/material";
import { styled } from "@mui/material/styles";
import { Facebook, GitHub, Instagram, Mail } from "@mui/icons-material";
import { useState } from "react";

const MyCustomToggleComponentContainer = styled(ToggleButtonGroup)(({ theme }) => ({
   '& .MuiToggleButtonGroup-grouped': {
      margin: theme.spacing(0.5),
      border: 0,
      '&.Mui-disabled': {
         border: 0,
      },
      color: 'white',
      '&:not(:first-of-type)': {
         borderRadius: theme.shape.borderRadius,
      },
      '&:first-of-type': {
         borderRadius: theme.shape.borderRadius,
      },
   },
}));

const App = () => {

   const [multiple, setMultiple] = useState(() => ['github', 'facebook']);

   const handleMultiple = (e, newMultiple) => {
      setMultiple(newMultiple);
   };

   return (
      <div
         style={{
            padding: 40,
            display: "flex",
            flexDirection: "column",
            gap: 20,
         }}>
         <MyCustomToggleComponentContainer
            value={multiple}
            onChange={handleMultiple}s
            aria-label="social media icons vertical"
            sx={{backgroundColor: 'lightgreen', padding: 5}}
            >
            <ToggleButton value="bold" aria-label="github" size="medium">
               <GitHub />
            </ToggleButton>
            <ToggleButton value="italic" aria-label="facebook" size="medium">
               <Facebook />
            </ToggleButton>
            <ToggleButton value="underlined" aria-label="instagram" size="medium">
               <Instagram />
            </ToggleButton>
            <ToggleButton value="color" aria-label="mail" size="medium" >
               <Mail />
            </ToggleButton>
         </MyCustomToggleComponentContainer>
      </div>
   );
};
export default App;

输出

结论

本文讨论了如何使用 React 在 Material UI 中处理切换按钮的多选。我们展示了处理选择的完整步骤,以及此,还讨论了不同方法的不同示例。

更新于: 2023年11月1日

637 次浏览

启动您的 职业生涯

通过完成课程获得认证

开始
广告