您现在的位置是:首页 >技术交流 >react自定义hook函数实现防抖效果网站首页技术交流

react自定义hook函数实现防抖效果

超人不会飞-_-|| 2026-03-25 12:01:04
简介react自定义hook函数实现防抖效果

面试题:在React和TypeScript环境中创建一个自定义的Hooks函数,以实现防抖功能

  1. 创建防抖函数
    首先,我们需要创建一个防抖函数。防抖函数会接受一个需要防抖处理的函数作为参数,并返回一个经过防抖处理的函数。
// debounce.ts
function debounce<T extends (...args: any[]) => any>(
  func: T,
  wait: number
): (...args: Parameters<T>) => void {
  let timeout: number;
  return function (this: any, ...args: Parameters<T>) {
    const context = this;
    clearTimeout(timeout);
    timeout = setTimeout(() => func.apply(context, args), wait);
  };
}
  1. 创建自定义Hooks
    接下来,我们基于这个防抖函数创建一个自定义Hooks。这个Hooks将允许我们在React组件中方便地使用防抖功能。
// useDebounce.ts
import { useEffect, useState, useCallback } from 'react';
import debounce from './debounce';

function useDebounce<T>(value: T, delay: number): T {
  const [debouncedValue, setDebouncedValue] = useState<T>(value);

  useEffect(() => {
    const handler = debounce(() => {
      setDebouncedValue(value);
    }, delay);

    handler();

    return () => {
      clearTimeout(handler as any);
    };
  }, [value, delay]);

  return debouncedValue;
}

export default useDebounce;
  1. 在组件中使用自定义Hooks
    最后,我们可以在React组件中使用这个自定义Hooks来实现防抖功能。
// App.tsx
import React, { useState } from 'react';
import useDebounce from './useDebounce';

const App: React.FC = () => {
  const [input, setInput] = useState('');
  const debouncedInput = useDebounce(input, 300);

  return (
    <div>
      <input
        type="text"
        value={input}
        onChange={(e) => setInput(e.target.value)}
        placeholder="Type something..."
      />
      <p>Debounced value: {debouncedInput}</p>
    </div>
  );
};

export default App;

总结

  • 创建防抖函数:我们定义了一个debounce函数,它接受一个函数和延迟时间作为参数,并返回一个经过防抖处理的函数。

  • 创建自定义Hooks:基于防抖函数,我们创建了一个useDebounce自定义Hooks,允许在React组件中使用防抖功能。

  • 在组件中使用:在React组件中,我们通过useDebounceHooks实现了对输入框输入的防抖处理。

以上步骤将帮助您在React和TypeScript环境中实现防抖功能。

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。