@mui/base 跟 @mui/system 的区别跟关系

232 阅读2分钟

@mui/base@mui/system 都是 Material-UI (MUI) 库的一部分,它们分别提供不同的功能和用途。下面是它们的区别和关系:

@mui/base

@mui/base 是 Material-UI 提供的一个低级别的、无样式的组件库。它提供了 MUI 组件的基本实现,但没有任何默认的样式。这使得开发者可以完全自定义组件的样式和行为,而不受预定义样式的约束。

  • 主要特点

    • 无样式:不包含任何预定义的样式,完全依赖开发者来定义样式。
    • 灵活性高:适合需要高度自定义样式的项目。
    • 基础组件:提供了基本的组件功能,比如输入框、按钮等,但没有样式。
  • 使用示例

    import React from 'react'; import { Button } from '@mui/base'; function MyButton() { return <Button>Click me</Button>; } export default MyButton;   
    

    在这个例子中,Button 组件没有任何默认样式,需要开发者自己定义。

    @mui/system

@mui/system 是 Material-UI 提供的一个系统,用于处理样式和布局。它基于 styled-componentsemotion,提供了一组工具和函数,用于定义和管理组件的样式。@mui/system 提供了一个灵活的 API 来处理样式,并支持主题化、响应式设计等特性。

  • 主要特点

    • 样式工具:提供了一系列工具和函数,用于定义和管理组件的样式。
    • 主题支持:支持全局主题管理,可以统一定义和管理应用的样式。
    • 响应式设计:支持响应式设计,可以轻松定义不同屏幕尺寸下的样式。
  • 使用示例

    jsx
    复制代码
    import React from 'react';
    import { Box } from '@mui/system';
    
    function MyBox() {
      return (
        <Box
          sx={{
            width: 300,
            height: 300,
            backgroundColor: 'primary.main',
            '&:hover': {
              backgroundColor: 'primary.dark',
            },
          }}
        >
          Hover me
        </Box>
      );
    }
    
    export default MyBox;
    

    在这个例子中,Box 组件使用 sx 属性定义了宽度、高度和背景颜色,并添加了 hover 状态的样式。

关系和结合使用

  • 关系@mui/base 提供了基础的、无样式的组件,而 @mui/system 提供了强大的样式管理工具。两者可以结合使用,@mui/system 可以为 @mui/base 提供的组件添加样式。

  • 结合使用示例

    jsx
    复制代码
    import React from 'react';
    import { styled } from '@mui/system';
    import { Button } from '@mui/base';
    
    const CustomButton = styled(Button)`
      background-color: blue;
      color: white;
      padding: 8px 16px;
      border: none;
      border-radius: 4px;
      &:hover {
        background-color: darkblue;
      }
    `;
    
    function MyButton() {
      return <CustomButton>Click me</CustomButton>;
    }
    
    export default MyButton;
    

    在这个例子中,@mui/systemstyled 函数被用来为 @mui/baseButton 组件添加样式。

通过结合使用 @mui/base@mui/system,开发者可以创建高度自定义和灵活的组件,同时享受强大的样式管理工具的便利。