javascript - Lodash Debounce 和 Apollo Client 使用LazyQuery 去抖动一次

标签 javascript reactjs graphql lodash apollo

尝试使用 _.debounce(fn, wait); 时调用 apollo 客户端 useLazyQuery(...)调用它第一次去抖动查询,然后调用查询函数,但之后它会在每次更改时继续调用查询而没有任何去抖动。
但是,如果我使用 console.log(...)而不是 useLazyQuery(...)调用它会完美地工作。
第一次工作,然后立即调用该函数而没有任何反跳:

const [value, setValue] = useState('');

const [search, { loading, data }] = useLazyQuery(SEARCH_QUERY, { variables: { searchString: value } });

const debouncer = React.useCallback(_.debounce(search, 1500), []);

...
<call to debouncer() with onChange event>
每次都能完美运行:
const [value, setValue] = useState('');

const [search, { loading, data }] = useLazyQuery(SEARCH_QUERY, { variables: { searchString: value } });

const debouncer = React.useCallback(_.debounce(val => (console.log(val)), 1500), []);

...
<call to debouncer() with onChange event>

最佳答案

对于这个问题,你甚至不需要状态;简化版:

import { useCallback } from 'react';
import { useLazyQuery } from '@apollo/client';
import _ from 'lodash';

function App() {
    const [search, { loading, data }] = useLazyQuery(SEARCH_QUERY);

    const debouncer = useCallback(_.debounce(search, 1000), []);

    return (
        <input
            type='text'
            onChange={e => debouncer({ variables: { code: e.target.value } })}
        />
    );
}

关于javascript - Lodash Debounce 和 Apollo Client 使用LazyQuery 去抖动一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69482390/

相关文章:

javascript - Angular 将范围传递给 ng-include

reactjs - 如何在 React Fabric-UI 的 CommandBar 中显示 Persona 组件?

css - 如何在 React 中将样式限制在组件级别?

javascript - React Relay 和服务器端渲染

python - 使用 Python 请求发布 GraphQL 突变

javascript - 如何在 JavaScript/JQuery 中绘制循环图?

javascript - 将输入文本传递给调用函数(是的,这是可能的)

javascript - 是否有一种设计模式的功能类似于观察者与装饰者的混合?

javascript - react -Redux; .map 函数有时会重复数组

reactjs - 为什么我总是收到不允许通配符 * 的 cors 错误,尽管我在服务器上指定了一个来源?