React中的优雅UX与Material-UI

来自菜鸟教程
跳转至:导航、​搜索

Material Design 是 Google 的网络设计语言,以卡片、基于网格的布局和响应式动画为中心。 使用 Material-UI,一个紧凑的、可定制的、漂亮的 React 组件和实用程序集合,将 Material Design 规范用于您的 React 应用程序是轻而易举的事。

这篇文章将介绍 Material-UI 的设置、使用和主题化,以及使用 CSS-in-JS 自定义组件样式的方法。 这篇文章涵盖了 Material-UI v1.x

设置

使用 npm 或 yarn 安装 @material-ui/core

$ yarn add @material-ui/core

# or, using npm:
$ npm install @material-ui/core

安装后material-ui就可以导入了:

import Button from '@material-ui/core/Button';
import Card from '@material-ui/core/Card';

字体

由于 Material Design 规范是在考虑 Roboto 和 Material Icons 的情况下创建的,因此您可能希望将它们包含在您的设计中。 在此示例中,我们将从 Google 字体加载它们。

index.html(部分)

<link rel="stylesheet"
  href=“https://fonts.googleapis.com/css?family=Roboto:400,500">
<link rel="stylesheet"
  href=“https://fonts.googleapis.com/icon?family=Material+Icons">

用法

Material-UI 库由用于布局、表单、导航和其他小部件的 React 组件组成。 让我们在这里讨论其中的一些。

按钮

这些组件中最简单的是 Button,从 @material-ui/core/Button 导入,单击时会产生漂亮的波纹效果。 与原生 HTML <button> 一样,按钮可能包含文本、图标或任何其他 React 节点。 在以下示例中,图标是从 @material-ui/core/Icon 导入的。

<Button variant="outlined" color="primary" onClick={…}>
  <Icon>location_on</Icon>
  Find me
</Button>

Button 组件值得注意的 props 包括:

  • variant:组件的视觉样式,可以是 containedoutlinedfab,或者默认链接样式为空。
  • colorprimarysecondarydefault 之一,与留空时相同的颜色。 稍后我们将介绍这些颜色的自定义。
  • mini:如果变体设置为 fab(浮动操作按钮),则按钮的大小会减小。

上图中的所有样式都是用这三个道具实现的! Button 组件还支持常见的 props,例如 classNamearia-labeldisabledhref

文本域

<TextField
  label="Basic TextField" />
<TextField
  placeholder="Placeholder here"
  label="Basic TextField" />

@material-ui/core/TextField 导入的 TextField 的行为类似于您的标准 React 输入组件,并支持以下道具(以及其他):

  • label:文本输入上方的动画标签。 当组件获得焦点时,它会像上面屏幕截图中的第二个示例一样移动到输入上方。
  • placeholder:输入内的灰色文本占位符。
  • InputProps:传递给包含的输入组件的道具。

下面是一个使用 InputProps prop 将 props 传递给 Input 组件的示例:

<TextField label="Length"
  InputProps={{
    endAdornment: <InputAdornment position="end">in.</InputAdornment>,
  }}
/>

可以看到,内部的 Input 组件可以带一个 startAdornmentendAdornment:输入左右的修饰节点,例如图标或标签。

装饰采用 <InputAdornment> 元素作为道具。 上面的例子是一个文本输入,右侧有一个 in. 装饰。

主题化

Material-UI 使用基于 JavaScript 的方法对其组件进行主题化,称为 CSS-in-JS。 使用这种方法,CSS 类名是使用 JavaScript 对象生成的。 如果你曾经使用过 React 的 style 属性,这些对象可能看起来很熟悉。

const styles = theme => ({
  container: {
    backgroundColor: 'blue',
    color: 'red',
    width: '75%',
    height: 5 * theme.spacing.unit
  }
});

在此示例中,styles 是一个以主题为参数并返回名为 container 的样式对象的函数。 骆驼大小写的 CSS 键被分配给字符串或数值,并且主题具有可自定义的间距。

使用生成的类

要将 styles 对象传递给我们的组件,我们使用 withStyles 函数返回一个 高阶组件,它将我们的类名作为名为 [X169X 的道具传递]。

const MyComponent = (props) => {
  const classes = props.classes;
  return (
    <div className={classes.container}>
      // stuff
    </div>
  );
}

export default withStyles(styles)(MyComponent);

创建自定义主题

要创建自定义主题,请使用 createMuiTheme 函数并将其返回值传递给应用程序根目录下的 MuiThemeProvider 元素。

import { createMuiTheme, MuiThemeProvider } from '@material-ui/core/styles';

const theme = createMuiTheme();

const App = props => (
  <MuiThemeProvider theme={theme}>
    // your app
  </MuiThemeProvider>
);

现在 MuiThemeProvider 的所有子代都有统一的可定制样式!

createMuiTheme 函数通常需要一个对象来定义主题:

const theme = createMuiTheme({
  palette: {
    primary: '#e89eef',
    secondary: '#336b87'
  }
});

所有颜色,包括我们在教程前面使用的主要颜色和次要颜色,都是可主题化的。 完整的选项可以在 主题文档 中找到。



Material-UI 是一种很好的方式,可以轻松地为您的 React 站点的控件添加精美的外观和感觉。 如果您想了解更多关于该项目的信息,您可以在此处访问官方文档,或在此处了解贡献。