React + Redux + Material-UI - 如何处理 Loading 状态

阅读时长 6 分钟读完

背景

无论是在前台还是后台,网络请求时不可避免地会遇到请求响应速度慢或数据量大等情况,就需要在前端展现给用户一个“加载中”的界面。而 React 和 Redux 的出现,大大简化了前端数据状态管理的复杂度,可以轻松处理 Loading 状态。

在本文中,我们将重点讨论在 React + Redux + Material-UI 中如何处理 Loading 状态,将详细讲解控制 Loading 状态所需具备的概念和技术,并给出实例代码供读者参考。

概念

Loading 状态

Loading 状态是指在用户等待数据处理过程中展现的界面状态,常见的有等待图案、加载中文字等,一般用于在数据处理时告诉用户现在系统正在处理用户的请求,请耐心等待。

高阶组件(HOC)

高阶组件(HOC)是一个函数,接受一个组件并返回一个新组件。HOC 组件可以用来重用组件逻辑、抽象状态和控制组件渲染的特性等。

技术

在 React + Redux + Material-UI 中处理 Loading 状态,我们需要以下技术:

Redux 的状态管理

使用 Redux 管理状态,包括存储正在加载状态的状态变量;

新建高阶组件

使用高阶组件实现 Loading 状态以及展示 Loading 状态的组件;

后端请求状态监测

获取后端请求状态,控制 Loading 状态的开启和关闭。

实例

下面是一个示例展示,在创建高阶组件来控制 Loading 状态时如何应用上述技术。

首先,我们需要在 Redux store 中定义一个状态变量来存储 Loading 状态:

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

----- ----------- - ------ - ------------- ------- -- -
    ------ ------------- -
        ---- ----------------
            ------ -
                ---------
                ---------- ----
            --
        ---- ------------------
            ------ -
                ---------
                ---------- -----
            --
        ---- ---------------
            ------ -
                ---------
                ---------- -----
            --
        --------
            ------ ------
    -
--
展开代码

上面的 initialState 中的 isLoading 变量就是用来存储 Loading 状态的变量。我们可以定义三个 action 分别用来表示请求开始、请求成功以及请求失败,这里简单定义一个 action,实际需要根据每个项目的具体需求进行定义。请求开始时打开 Loading 状态,请求结束则关闭。

接下来,我们可以创建一个高阶组件 LoadingHOC,它接受一个组件作为参数,如果 isLoading 为 true,则渲染出 Loading 组件,否则返回正常的组件:

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

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

------ ------- -----------
展开代码

这里我们使用了 redux 的 connect 方法,将 isLoading 变量从 Redux store 中代理到 HOC 中。

最后,我们可以使用新建的 HOC 组件来包裹需要显示 Loading 状态的组件,并调用后端请求接口方法:

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

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

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

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

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

------ ------- ------------------------ ---------------------------------------------
展开代码

在这里,我们将 MyComponent 用 LoadingHOC 进行包裹,控制 Loading 状态的展示。

总之,使用 React + Redux + Material-UI 可以通过新建 HOC 组件来处理加载状态并展示 Loading 状态。状态管理技术、高阶组件、后端请求监测等技术都必不可少,只有通过深入理解这些技术,才能更好地处理加载状态。

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

纠错
反馈

纠错反馈