npm 包 material-table 使用教程

阅读时长 12 分钟读完

前言

前端的开发中,数据表格是一种非常常见的组件,而 material-table 是在 Material Design 规范下的一个 React 数据表格组件,它支持排序、过滤、分页等常见功能,同时还支持自定义操作按钮和样式。

在本文中,我们将介绍使用 npm 包 material-table 的详细教程。本教程将从 material-table 的安装开始,逐步讲解 material-table 的主要功能和配置,以及编写一个完整的示例代码,帮助读者快速掌握 material-table 的使用方法。

安装

使用 npm 安装 material-table,可以执行如下命令:

根据需求,可以选择使用 yarn 或者其他包管理工具安装。

基本使用

安装 material-table 后,我们就可以开始使用它了。首先,需要导入 material-table 组件:

然后,我们可以将 material-table 组件作为 JSX 元素渲染,并传入数据列表作为其一个 prop:

-- -------------------- ---- -------
--------------
  ----------
    - ------ ----- ------ ------ --
    - ------ ----- ------ ------ ----- --------- --
    - ------ ----- ------ --------- ------- - -- ---- -- --- - --
  --
  -------
    - ----- ----- ---- --- ------- - --
    - ----- ----- ---- --- ------- - --
    - ----- ----- ---- --- ------- - --
  --
  ------------
--

在上面的代码中,我们定义了三列数据,分别是“名称”、“年龄”和“性别”,并使用 data prop 传入了一个包含这些数据的数组。最后,我们将“用户列表”作为表格标题传入。

在渲染完这个组件之后,就可以得到一个简单的数据表格了:

进阶配置

除了基本的表格渲染之外,material-table 还支持许多进阶使用功能,我们将在下面介绍其中的一部分。

分页和排序

material-table 内置了对于分页和排序的支持,我们只需要通过将其对应的 prop 设置为 true,就可以开启它们的功能:

-- -------------------- ---- -------
--------------
  ----------
    ---
  --
  -------
    ---
  --
  ------------
  -------------
  --------------
--

除了开启分页和排序的方式之外,我们还可以通过传入相应的配置来定制分页和排序的行为。例如,下面的代码将自定义每页显示的行数为 5,并按照“名称”列进行默认排序:

-- -------------------- ---- -------
--------------
  ----------
    ---
  --
  -------
    ---
  --
  ------------
  ----------
    ------- -----
    --------- --
    ---------------- --- --- ----
    -------- -----
    ------------- ------- --------
    ------------ --
    ----------------- -------
    --------------------- ------
  --
--

在上面的代码中,我们使用 options prop,传入了一个包含了各种选项的对象,例如 pageSize、sortingOrder、initialPage 等。

过滤

在数据展示较多的情况下,可以使用 material-table 提供的过滤功能,让用户可以按照某个字段的值进行筛选。要开启过滤功能,我们需要在 columns 中为需要使用过滤的列添加 searchable 属性:

-- -------------------- ---- -------
--------------
  ----------
    - ------ ----- ------ ------- ----------- ---- --
    - ------ ----- ------ ------ ----- ---------- ----------- ---- --
    - ------ ----- ------ --------- ------- - -- ---- -- --- -- ----------- ---- --
  --
  -------
    ---
  --
  ------------
--

在上面的代码中,我们为“名称”、“年龄”和“性别”三列都添加了 searchable 属性,这样每一列默认都会有一个输入框,用户可以在上面输入搜索关键词并进行搜索。

我们还可以通过在 options 中配置相关的选项,以定制搜索框的行为、搜索时机等。例如,下面的代码将调整搜索框的位置,并在输入时自动触发搜索:

-- -------------------- ---- -------
--------------
  ----------
    ---
  --
  -------
    ---
  --
  ------------
  ----------
    ------- -----
    --------------------- --------
    ----------------- ----
    ---------- -----
  --
--

在上面的代码中,我们使用 options 帮助配置搜索框的相关选项,例如 searchFieldAlignment 指定搜索框的对齐方式,debounceInterval 指定搜索的延迟时间。

操作按钮

material-table 允许开发人员为每一行数据提供多个操作按钮,以便用户能够对数据进行相应的操作。为表格添加操作按钮的方式,是在 columns 中添加 actions 字段并传入一个 JSX 元素:

-- -------------------- ---- -------
--------------
  ----------
    - ------ ----- ------ ------- ----------- ---- --
    - ------ ----- ------ ------ ----- ---------- ----------- ---- --
    - ------ ----- ------ --------- ------- - -- ---- -- --- -- ----------- ---- --
    -
      ------ -----
      ------ ---
      ------- ------- --
        ------- ------------------ --------------- ----------- -- --------- -------------------
          --
        ----------
    --
  --
  -------
    ---
  --
  ------------
--

在上面的代码中,我们为表格添加了一个名为“操作”的列,并在其 render 方法中渲染了一个按钮。这个按钮的功能是弹出一个窗口,询问用户是否确认删除当前行,之后再执行相应的操作。

主题和样式

因为 material-table 是遵循 Material Design 规范的组件,所以使用 material-table 可以轻松实现符合 Material Design 的样式。在 material-table 中,可以通过传入一个主题对象或者样式表对象来自定义组件的颜色和样式。例如,下面的代码定义了一个名为“customTheme”的主题:

-- -------------------- ---- -------
------ - --------------- ---------------- - ---- ---------------------------

----- ----------- - ----------------
  -------- -
    -------- - ----- --------- --
    ---------- - ----- --------- --
  --
---

----------------- --------------------
  --------------
    ----------
      ---
    --
    ---
  --
-------------------

在上面的代码中,我们通过 createMuiTheme 方法创建了一个主题对象,并传入了两个颜色,分别是 primary、secondary。随后,我们使用 MuiThemeProvider 组件将 material-table 包裹,并将这个主题传入其中。

当然,如果你需要更加自定义的样式,则可以使用为 material-table 页面设置样式表的方式,例如:

-- -------------------- ---- -------
------ - ---------- - ---- ---------------------------

----- --------- - ------------
  ----- -
    -- ------------------ ------------------- -
      ---------------- -------- -- -- -------
    --
    -- ------------------ ---------- -
      ---------------- -------- -- -- -------
    --
  --
---

----- ------- - ------------

---- -------------------------
  --------------
    ----------
      ---
    --
    ---
  --
------

在上面的代码中,我们使用 makeStyles 创建了一个样式表,随后应用到了 material-table 渲染的根元素上(在该元素上设置的样式会自动应用到子元素中)。

示例代码

在本文的最后,我们将分享一个完整的示例代码,帮助读者更加深入地理解 material-table 的使用方法:

-- -------------------- ---- -------
------ ----- ---- --------
------ ------------- ---- -----------------
------ - ------- ---------- - ---- --------------------
------ - ---- ------- ---- - ---- ---------------------
------ - --------------- ----------- ---------------- - ---- ---------------------------

----- ----------- - ----------------
  -------- -
    -------- - ----- --------- --
    ---------- - ----- --------- --
  --
---

----- ---- - -
  - --- -- ----- ----- ---- --- ------- - --
  - --- -- ----- ----- ---- --- ------- - --
  - --- -- ----- ----- ---- --- ------- - --
--

----- --------- - ------------
  ----- -
    -- ------------------ ------------------- -
      ---------------- -------- -- -- -------
    --
    -- ------------------ ---------- -
      ---------------- -------- -- -- -------
    --
  --
---

----- --------- - -- -- -
  ----- ------- - ------------

  ------ -
    ----------------- --------------------
      --------------
        ----------
          - ------ ----- ------ ------- ----------- ---- --
          - ------ ----- ------ ------ ----- ---------- ----------- ---- --
          - ------ ----- ------ --------- ------- - -- ---- -- --- -- ----------- ---- --
          -
            ------ -----
            ------ ---
            ------- ------- -- -
              --
                ----------- --------------- ----------- -- --------- -------------------
                  ----- --
                -------------
                ----------- ----------------- ----------- -- --------- -------------------
                  ------- --
                -------------
              ---
            --
          --
        --
        -----------
        ------------
        ----------
          ------- -----
          --------- --
          ---------------- --- --- ----
          -------- -----
          ------------- ------- --------
          ------------ --
          ----------------- -------
          --------------------- ------
          ------- -----
          --------------------- --------
          ----------------- ----
          ---------- -----
        --
      --
    -------------------
  --
--

------ ------- ----------

总结

本文详细介绍了 npm 包 material-table 的使用方法,包括基本使用、分页和排序、过滤、操作按钮、主题和样式等方面的内容。通过阅读本文,相信读者已经可以熟练使用 material-table,并顺利完成相应的前端开发工作。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/material-table