Rxjs在使用主题的React文本输入组件上进行反跳不会在无状态/功能组件上批量输入文本

SinSync

我试图更深入地研究rxjs并发现一个问题,在该问题中,我试图消除抖动的输入字段在每次按键时都会调度一个事件,该消除抖动仅保存输出,但会导致像这样的树:

a
as(delay - waits 200ms, then fires the rest synchronously)
asd
asdf
asdfg 
....

相同的代码可以在类组件中正常工作https://stackoverflow.com/a/44300853/1356046),但无法理解为什么它不适用于无状态组件。这是一个示例:https ://stackblitz.com/edit/react-hzhrmf-您可以看到每次击键都会触发useState更新。

非常感谢。

博恩

React不断调用您的函数来渲染组件。因此,主题不断被创建。

使用带有useState的工厂来保留主题,并使用useEffect来确保仅进行一次订阅应该可以解决您的问题。

像这样的东西:

import React, { Component, useState, useEffect, useRef } from 'react';
import { render } from 'react-dom';
import { debounceTime, map, tap, distinctUntilChanged } from 'rxjs/operators';
import { fromEvent, Subject } from 'rxjs';

import './style.css';
const App = props => {
  const [queryName, setQueryName] = useState("");
  const [debouncedName, setDebouncedName] = useState("");
  const [onSearch$] = useState(()=>new Subject());
  useEffect(() => {
    const subscription = onSearch$.pipe(
      debounceTime(400),
      distinctUntilChanged(),
      tap(a => console.log(a))
    ).subscribe(setDebouncedName);
  }, [])
  const handleSearch = e => {
    setQueryName(e.target.value);
    onSearch$.next(e.target.value);
  };

  return (
    <div>
      <input
        placeholder="Search Tags"
        value={queryName}
        onChange={handleSearch}
      />
      <p>Debounced: {debouncedName}</p>
    </div>
  );
}

render(<App />, document.getElementById('root'));

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何从字符串输入中使用主题和通过RxJs 5进行反跳

来自分类Dev

React组件不会在状态更改时重新呈现

来自分类Dev

React JS组件不会在状态更改时更新

来自分类Dev

添加输入字段onClick无状态组件React Electron

来自分类Dev

React不会在组件中触发功能

来自分类Dev

在无状态功能组件中进行React Router Redirect

来自分类Dev

从无状态组件获取输入值

来自分类Dev

React功能组件不会在父功能组件内部重新分配

来自分类Dev

可以在不使用钩子的无状态React组件中使用lodash防反跳吗?

来自分类Dev

React Typescript功能组件输入

来自分类Dev

Ionic 2文本不会在选择组件中自动换行

来自分类Dev

组件不会在状态更改时重新呈现

来自分类Dev

组件不会在状态更新时重新渲染

来自分类Dev

React-redux组件不会在商店状态更改时重新呈现

来自分类Dev

React + Redux:组件不会在状态更改时重新呈现

来自分类Dev

React Native:基于Array.map()的渲染组件不会在状态更改时更新

来自分类Dev

同级组件不会在状态更改时重新呈现(使用useEffect,useState和Context)

来自分类Dev

反应无状态组件无法编辑文本字段

来自分类Dev

IE 10不会在文本输入上重新应用填充

来自分类Dev

提前输入不会在下拉菜单中显示文本

来自分类Dev

IE 10不会在文本输入上重新应用填充

来自分类Dev

如何在ReactJS无状态组件中使用纯JavaScript填充输入值?

来自分类Dev

如何将文本输入返回到React组件

来自分类Dev

React无状态功能组件中的If-else

来自分类Dev

如何在Typescript中编写React无状态功能组件?

来自分类Dev

React、Typescript 中无状态功能组件内的事件处理

来自分类Dev

将 props 传递给高阶无状态功能 React 组件

来自分类Dev

fireEvent不会在React组件上单击按钮

来自分类Dev

React - 道具不会在整个组件中更新相同

Related 相关文章

  1. 1

    如何从字符串输入中使用主题和通过RxJs 5进行反跳

  2. 2

    React组件不会在状态更改时重新呈现

  3. 3

    React JS组件不会在状态更改时更新

  4. 4

    添加输入字段onClick无状态组件React Electron

  5. 5

    React不会在组件中触发功能

  6. 6

    在无状态功能组件中进行React Router Redirect

  7. 7

    从无状态组件获取输入值

  8. 8

    React功能组件不会在父功能组件内部重新分配

  9. 9

    可以在不使用钩子的无状态React组件中使用lodash防反跳吗?

  10. 10

    React Typescript功能组件输入

  11. 11

    Ionic 2文本不会在选择组件中自动换行

  12. 12

    组件不会在状态更改时重新呈现

  13. 13

    组件不会在状态更新时重新渲染

  14. 14

    React-redux组件不会在商店状态更改时重新呈现

  15. 15

    React + Redux:组件不会在状态更改时重新呈现

  16. 16

    React Native:基于Array.map()的渲染组件不会在状态更改时更新

  17. 17

    同级组件不会在状态更改时重新呈现(使用useEffect,useState和Context)

  18. 18

    反应无状态组件无法编辑文本字段

  19. 19

    IE 10不会在文本输入上重新应用填充

  20. 20

    提前输入不会在下拉菜单中显示文本

  21. 21

    IE 10不会在文本输入上重新应用填充

  22. 22

    如何在ReactJS无状态组件中使用纯JavaScript填充输入值?

  23. 23

    如何将文本输入返回到React组件

  24. 24

    React无状态功能组件中的If-else

  25. 25

    如何在Typescript中编写React无状态功能组件?

  26. 26

    React、Typescript 中无状态功能组件内的事件处理

  27. 27

    将 props 传递给高阶无状态功能 React 组件

  28. 28

    fireEvent不会在React组件上单击按钮

  29. 29

    React - 道具不会在整个组件中更新相同

热门标签

归档