npm 包 redux-socket.io 的使用教程

阅读时长 6 分钟读完

前言

在 Web 应用中,前端与后端的数据传输是必不可少的一环。传统的做法是前后端通过 HTTP 协议交换数据,但这种方式存在许多问题,比如数据传输效率低,服务器长连接困难等等。为了解决这些问题,WebSocket 出现了,它可以建立服务器和客户端之间全双工(双向通信)的通信管道。redux-socket.io 就是一个将 WebSocket 与 Redux 相结合的 npm 包,它使得数据的传输变得更加便捷和高效。

安装

首先在你的应用中安装 redux-socket.io:

配置

redux-socket.io 使用 socket.io-client 来与服务器进行 WebSocket 通信,所以在配置前需要先安装 socket.io-client:

接着在你的应用中按照下面的方式引入 redux-socket.io:

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

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

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

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

在这里,我们首先引入 socket.io-client,创建一个 socket 实例。然后将 socket 实例传给 redux-socket.io 中间件,得到一个中间件 reduxSocketIoMiddleware,该中间件会在每次发送 action 时将数据通过 WebSocket 发送给服务端。最后,我们使用 applyMiddleware 将 reduxSocketIoMiddleware 添加到 Redux 应用程序的 middleware 链中。

使用

有了 redux-socket.io,我们就可以像普通的 Redux 应用一样来发送和处理 action。不同的是,redux-socket.io 添加了一些额外的 action 类型。下面是这些额外的 action 类型。

SOCKET_SEND

该 action 类型用于发送数据到 WebSocket 服务端。它包含下面的参数:

  • type: [String],必须,表示要发送的 action 的类型。
  • data: [Object],必须,要发送的数据。

发送一个 SOCKET_SEND 的 action 可以通过下面的方式:

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

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

SOCKET_EMIT

该 action 类型也用于发送数据到 WebSocket 服务端。它与 SOCKET_SEND 的区别在于它多了一个 event 参数。像这样:

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

SOCKET_ON

该 action 类型用于监听 WebSocket 服务端的事件。它包含下面的参数:

  • event: [String],必须,要监听的事件名。
  • fn: [Function],必须,事件触发后的回调函数。

使用例子:

SOCKET_OFF

该 action 类型用于取消监听某个事件。它包含下面的参数:

  • event: [String],必须,被取消监听的事件名。
  • fn: [Function],可选,被取消监听的回调函数。

如果没有指定 fn 参数,那么所有的监听该事件的回调函数都将被取消:

示例

下面是一个完整的使用示例,以聊天室为例:

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

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

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

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

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

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

在上面的代码中,我们首先创建了一个 WebSocket 实例,然后创建了 redux-socket.io 中间件,并将其添加到 Redux 应用程序的 middleware 链中。接下来,我们监听 WebSocket 服务端发来的 message 事件,当事件触发时将 message 数据发送到 Redux store 中。最后,我们发送一个消息到 WebSocket 服务端,该消息的类型为 SEND_MESSAGE,数据为 { text: 'Hello World!', from: 'John', to: 'Sarah' }

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