RxJS 中的 fromEvent 操作符详解

阅读时长 5 分钟读完

RxJS 是一个非常优秀的 JavaScript 响应式编程库。它通过提供一系列操作符来简化开发者的工作。而 fromEvent 操作符是其中一个非常实用的操作符,它可以让开发者快速地将 DOM 事件转化为 Observables,方便进行响应式编程。

什么是 fromEvent 操作符?

在 RxJS 中,fromEvent 操作符用于将 DOM 事件转化为 Observables,并且可以带上事件的名字或者选择器来指定监听哪个事件或哪个 DOM 元素的事件。fromEvent 操作符通常会在前端开发中使用,例如监听用户点击、滚动、输入等操作。

使用 fromEvent 操作符

fromEvent 操作符的使用非常简单,它接收两个参数,第一个参数是指定要监听的 DOM 元素,可以是元素本身或者字符串选择器。第二个参数是指定要监听的事件名称或事件对象,例如 "click"、 "scroll" 等,也可以是自定义的事件对象。

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

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

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

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

在上面的示例代码中,我们使用 fromEvent 操作符将 button 元素的 click 事件转化为一个名为 click$ 的 Observable,并将其订阅。当用户点击 button 元素时,Observable 会发出一个 next 事件,我们在订阅函数中回调来处理这个事件。

我们也可以使用 RxJS 提供的 ofType 操作符来过滤出指定的事件类型:

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

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

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

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

在上面的示例代码中,我们在 fromEvent 操作符的返回值中使用 pipe 方法并传入 ofType 操作符。这个操作符会过滤掉不是 click 事件的事件,只让 click 事件通过。

实战应用

下面,我们来看一个更复杂的应用场景。假设我们在页面中有一个输入框和一个按钮,用户在输入框中输入内容后点击按钮,我们需要向后端发送一个请求,并将后端返回的数据显示在页面上。

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

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

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

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

在上面的示例代码中,我们使用 fromEvent 操作符创建了一个名为 search$ 的 Observable,它会在用户点击按钮时发出一个请求。我们使用了 switchMap 操作符来将 click 事件转换为后端请求,并将得到的数据映射为 results 数组。接着,我们使用 filter 操作符来过滤掉空结果,使用 debounceTime 操作符来防止用户频繁请求,并使用 distinctUntilChanged 操作符来避免重复请求。最后,我们在 subscribe 函数中将每个结果的标题添加到 result 元素中。

总结

RxJS 中的 fromEvent 操作符可以让开发者快速地将 DOM 事件转化为 Observables,方便进行响应式编程。它非常实用而且易于使用,我们可以根据应用场景进行配置来达到最佳的效果。

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

纠错
反馈