当前位置:首页 > React

实现react搜索框

2026-01-27 05:04:49React

实现React搜索框的方法

基础搜索框实现

使用React的useStateonChange事件可以实现基础搜索功能:

import React, { useState } from 'react';

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

  const handleChange = (event) => {
    setSearchTerm(event.target.value);
  };

  return (
    <div>
      <input
        type="text"
        placeholder="Search..."
        value={searchTerm}
        onChange={handleChange}
      />
      <p>Searching for: {searchTerm}</p>
    </div>
  );
}

防抖优化

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

实现react搜索框

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

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

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

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

  return (
    <div>
      <input
        type="text"
        placeholder="Search with debounce..."
        value={searchTerm}
        onChange={(e) => setSearchTerm(e.target.value)}
      />
      <p>Debounced search: {debouncedTerm}</p>
    </div>
  );
}

搜索API数据

结合异步请求实现实时搜索:

实现react搜索框

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

function ApiSearch() {
  const [query, setQuery] = useState('');
  const [results, setResults] = useState([]);

  useEffect(() => {
    const fetchData = async () => {
      if (query.length > 2) {
        const response = await axios.get(
          `https://api.example.com/search?q=${query}`
        );
        setResults(response.data);
      }
    };

    const timerId = setTimeout(fetchData, 300);
    return () => clearTimeout(timerId);
  }, [query]);

  return (
    <div>
      <input
        type="text"
        value={query}
        onChange={(e) => setQuery(e.target.value)}
        placeholder="Search API..."
      />
      <ul>
        {results.map((item) => (
          <li key={item.id}>{item.name}</li>
        ))}
      </ul>
    </div>
  );
}

样式优化

添加CSS样式增强用户体验:

.search-container {
  margin: 20px;
}

.search-input {
  padding: 10px;
  width: 300px;
  border: 1px solid #ddd;
  border-radius: 4px;
  font-size: 16px;
}

.search-input:focus {
  outline: none;
  border-color: #4d90fe;
  box-shadow: 0 0 5px rgba(77, 144, 254, 0.5);
}

.search-results {
  margin-top: 10px;
  list-style: none;
  padding: 0;
}

.search-results li {
  padding: 8px;
  border-bottom: 1px solid #eee;
}

高级功能扩展

实现搜索历史记录功能:

function SearchWithHistory() {
  const [query, setQuery] = useState('');
  const [history, setHistory] = useState([]);

  const handleSearch = () => {
    if (query && !history.includes(query)) {
      setHistory([...history, query]);
    }
    // 执行搜索逻辑
  };

  return (
    <div>
      <input
        value={query}
        onChange={(e) => setQuery(e.target.value)}
        onKeyPress={(e) => e.key === 'Enter' && handleSearch()}
      />
      <button onClick={handleSearch}>Search</button>

      <div>
        <h4>Search History</h4>
        <ul>
          {history.map((item, index) => (
            <li key={index}>{item}</li>
          ))}
        </ul>
      </div>
    </div>
  );
}

标签: react
分享给朋友:

相关文章

react如何记忆

react如何记忆

React 记忆技术 在 React 中,记忆(Memoization)是一种优化技术,用于避免不必要的重新渲染或计算。React 提供了多种内置方法和第三方库来实现记忆功能。 useMemo Ho…

电脑如何安装react

电脑如何安装react

安装 Node.js 和 npm React 依赖于 Node.js 和 npm(Node Package Manager)。从 Node.js 官网下载并安装最新稳定版本,安装完成后会自动包含 np…

如何选购react

如何选购react

选购 React 相关产品或服务的建议 React 是一个用于构建用户界面的 JavaScript 库,广泛应用于前端开发。以下是选购 React 相关产品(如课程、书籍、工具、组件库等)的参考方法:…

react如何运行

react如何运行

运行React项目的步骤 安装Node.js 确保系统已安装Node.js(建议版本12以上),可从官网下载并安装。Node.js自带npm包管理器,用于后续依赖安装。 创建React项目 使用官方…

如何同步react

如何同步react

同步React组件状态的方法 使用useState和useEffect钩子组合可以同步React组件的状态。useState用于声明状态变量,useEffect用于监听状态变化并执行副作用。 imp…

react如何刷新

react如何刷新

刷新React组件的方法 使用状态更新触发重新渲染 通过更新组件的状态可以触发重新渲染。React会在状态变化时自动重新渲染组件。 const [count, setCount] = useStat…