当前位置:首页 > React

使用react实现input搜索

2026-01-27 19:38:10React

实现React Input搜索功能

在React中实现一个输入框搜索功能,通常需要结合状态管理和事件处理。以下是一个完整的实现方案:

基础实现

创建一个受控组件来管理输入状态:

使用react实现input搜索

import React, { useState } from 'react';

function SearchInput() {
  const [searchTerm, setSearchTerm] = useState('');

  const handleSearch = (e) => {
    setSearchTerm(e.target.value);
    // 这里可以添加搜索逻辑或API调用
  };

  return (
    <div>
      <input
        type="text"
        value={searchTerm}
        onChange={handleSearch}
        placeholder="搜索..."
      />
    </div>
  );
}

export default SearchInput;

添加防抖优化

为防止频繁触发搜索请求,可以使用防抖技术:

使用react实现input搜索

import React, { useState, useEffect } from 'react';

function DebouncedSearchInput() {
  const [searchTerm, setSearchTerm] = useState('');
  const [debouncedTerm, setDebouncedTerm] = useState('');

  useEffect(() => {
    const timerId = setTimeout(() => {
      setDebouncedTerm(searchTerm);
    }, 500);

    return () => {
      clearTimeout(timerId);
    };
  }, [searchTerm]);

  useEffect(() => {
    if (debouncedTerm) {
      // 执行搜索逻辑
      console.log('搜索:', debouncedTerm);
    }
  }, [debouncedTerm]);

  return (
    <input
      type="text"
      value={searchTerm}
      onChange={(e) => setSearchTerm(e.target.value)}
      placeholder="搜索..."
    />
  );
}

完整搜索组件示例

结合搜索结果展示的完整组件:

import React, { useState, useEffect } from 'react';

function SearchComponent() {
  const [query, setQuery] = useState('');
  const [results, setResults] = useState([]);
  const [isSearching, setIsSearching] = useState(false);

  const searchItems = async (searchTerm) => {
    if (!searchTerm) {
      setResults([]);
      return;
    }

    setIsSearching(true);
    try {
      // 这里替换为实际的API调用
      const response = await fetch(`/api/search?q=${searchTerm}`);
      const data = await response.json();
      setResults(data);
    } catch (error) {
      console.error('搜索出错:', error);
    } finally {
      setIsSearching(false);
    }
  };

  useEffect(() => {
    const timerId = setTimeout(() => {
      searchItems(query);
    }, 500);

    return () => {
      clearTimeout(timerId);
    };
  }, [query]);

  return (
    <div>
      <input
        type="text"
        value={query}
        onChange={(e) => setQuery(e.target.value)}
        placeholder="搜索..."
      />

      {isSearching && <div>搜索中...</div>}

      <ul>
        {results.map((item) => (
          <li key={item.id}>{item.name}</li>
        ))}
      </ul>
    </div>
  );
}

使用自定义Hook封装

可以将搜索逻辑封装为自定义Hook以便复用:

import { useState, useEffect } from 'react';

function useSearch(searchFunction, delay = 500) {
  const [query, setQuery] = useState('');
  const [results, setResults] = useState(null);
  const [isSearching, setIsSearching] = useState(false);

  useEffect(() => {
    const handler = setTimeout(() => {
      if (query.trim()) {
        setIsSearching(true);
        searchFunction(query)
          .then(setResults)
          .finally(() => setIsSearching(false));
      } else {
        setResults(null);
      }
    }, delay);

    return () => {
      clearTimeout(handler);
    };
  }, [query, searchFunction, delay]);

  return [query, setQuery, results, isSearching];
}

// 使用示例
function SearchComponent() {
  const [query, setQuery, results, isSearching] = useSearch(async (q) => {
    const response = await fetch(`/api/search?q=${q}`);
    return response.json();
  });

  return (
    <div>
      <input
        value={query}
        onChange={(e) => setQuery(e.target.value)}
        placeholder="搜索..."
      />
      {/* 渲染结果 */}
    </div>
  );
}

这些实现方案涵盖了从基础到高级的React搜索输入功能,可以根据具体需求选择适合的方案或进行组合使用。

标签: reactinput
分享给朋友:

相关文章

react native如何启动

react native如何启动

如何启动 React Native 项目 安装 Node.js 和 npm 确保已安装 Node.js(建议版本 16 或更高)和 npm(Node.js 自带)。可通过以下命令检查版本: nod…

如何评价react native

如何评价react native

React Native 的优势 跨平台开发效率高:基于 JavaScript 和 React 语法,可同时开发 iOS 和 Android 应用,减少重复代码量。性能接近原生:通过原生组件渲染,性能…

vue实现input

vue实现input

Vue 实现 Input 组件 在 Vue 中实现一个 Input 组件可以通过多种方式完成,以下是几种常见的方法: 使用 v-model 双向绑定 通过 v-model 可以轻松实现双向数据绑定…

react如何开发组件

react如何开发组件

React 组件开发基础 React 组件分为函数组件和类组件两种形式。函数组件是现代 React 开发的主流方式,结合 Hooks 可以实现完整功能。 函数组件示例: function Gr…

如何手写一个react

如何手写一个react

手写一个简单的 React 创建一个基础的 React 实现需要理解其核心概念:虚拟 DOM、组件、状态管理和渲染。以下是一个简化版的 React 实现。 创建虚拟 DOM 虚拟 DOM 是真实 D…

如何react页面

如何react页面

创建 React 页面 使用 create-react-app 快速初始化项目: npx create-react-app my-app cd my-app npm start 基础页面结构 在…