React 全家桶实现消息通知模块

阅读时长 22 分钟读完

在现代的 Web 应用程序中,消息通知是一个非常重要的功能。React 全家桶是一个流行的前端框架,它提供了许多工具和库,可以帮助我们快速开发 Web 应用程序。在这篇文章中,我们将使用 React 全家桶来实现一个简单的消息通知模块。

技术栈

在实现消息通知模块时,我们将使用以下技术:

  • React:一个用于构建用户界面的 JavaScript 库。
  • React Router:一个用于构建单页应用程序的路由库。
  • Redux:一个状态管理库,用于管理应用程序的状态。
  • React-Redux:React 和 Redux 的集成库。
  • Redux-Saga:一个用于管理应用程序副作用的库。

实现

设计

在我们开始编码之前,让我们先设计一下我们的消息通知模块。我们的模块应该具有以下功能:

  • 显示当前用户的未读消息数量。
  • 显示当前用户的消息列表。
  • 当用户点击消息时,将其标记为已读。
  • 当用户标记所有消息为已读时,将未读消息数量归零。
  • 当用户收到新消息时,自动更新未读消息数量。

创建 React 应用程序

我们将使用 Create React App 来创建我们的应用程序。在终端中输入以下命令:

安装依赖项

我们需要安装 React Router、Redux、React-Redux 和 Redux-Saga。在终端中输入以下命令:

添加路由

我们的应用程序将有两个页面:消息列表和消息详情。我们将使用 React Router 来管理路由。在 src 目录下创建一个名为 routes.js 的文件,并添加以下代码:

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

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

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

创建 Redux Store

我们将使用 Redux 来管理应用程序的状态。在 src 目录下创建一个名为 store.js 的文件,并添加以下代码:

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

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

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

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

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

在上面的代码中,我们创建了一个 Redux Store,并将 Redux Saga 中间件应用于它。我们还将 rootSaga 作为参数传递给 sagaMiddleware.run() 函数。

创建 Redux Reducer

我们需要创建一个 Redux Reducer 来管理应用程序的状态。在 src 目录下创建一个名为 reducers.js 的文件,并添加以下代码:

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

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

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

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

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

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

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

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

在上面的代码中,我们定义了四个 Redux Reducer:notificationsReducerunreadCountReducerisLoadingReducererrorReducer。这些 Reducer 管理应用程序的不同方面的状态。

创建 Redux Action

我们需要创建 Redux Action 来更新应用程序的状态。在 src 目录下创建一个名为 actions.js 的文件,并添加以下代码:

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

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

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

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

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

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

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

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

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

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

在上面的代码中,我们定义了 Redux Action,它们将被用于更新应用程序的状态。

创建 Redux Saga

我们需要创建 Redux Saga 来处理应用程序的副作用。在 src 目录下创建一个名为 sagas.js 的文件,并添加以下代码:

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

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

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

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

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

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

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

在上面的代码中,我们定义了三个 Redux Saga:fetchNotificationsmarkNotificationAsReadmarkAllNotificationsAsRead。这些 Saga 处理应用程序的副作用,并根据结果更新应用程序的状态。

创建 React 组件

现在我们可以创建我们的 React 组件了。在 src/components 目录下创建一个名为 NotificationList.js 的文件,并添加以下代码:

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

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

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

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

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

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

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

在上面的代码中,我们定义了一个名为 NotificationList 的 React 组件。这个组件显示用户的未读消息数量和消息列表,并允许用户将消息标记为已读。

我们还定义了 handleMarkAsReadhandleMarkAllAsRead 函数,它们将被用于处理用户的交互。

src/components 目录下创建一个名为 NotificationDetail.js 的文件,并添加以下代码:

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

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

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

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

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

在上面的代码中,我们定义了一个名为 NotificationDetail 的 React 组件。这个组件显示消息的详细信息,并在用户访问消息详情页面时将消息标记为已读。

添加样式

最后,我们可以为我们的应用程序添加一些样式。在 src 目录下创建一个名为 index.css 的文件,并添加以下代码:

src/index.js 文件中,我们可以将这个样式文件导入到我们的应用程序中:

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

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

示例代码

你可以在 GitHub 上查看完整的示例代码。

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

纠错
反馈