当前位置:首页 > 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 是一个用于构建用户界面的 JavaScript 库,专注于组件化开发。通过虚拟 DOM 和高效的渲染机制,React 能够实现高性能的 UI 更新。 安装 Re…

react如何查

react如何查

React 查询方法 React 提供了多种查询 DOM 元素的方式,以下是几种常见的方法: 使用 ref 通过 useRef 钩子可以获取 DOM 节点的引用,适用于直接操作 DOM 的场景。…

react如何重启

react如何重启

重启 React 应用的方法 重新加载当前页面 使用 window.location.reload() 强制刷新页面,这会重新加载整个应用并重置所有状态。 window.location…

react 如何循环

react 如何循环

循环渲染列表 在React中,循环渲染列表通常使用map方法。map可以遍历数组并返回一个新的React元素数组。 const items = ['Apple', 'Banana', 'Orange…

odyssey react 如何

odyssey react 如何

Odyssey React 是耐克推出的一款跑鞋系列,以其轻量化设计和React泡沫缓震技术著称。以下是关于该系列鞋款的主要特点和使用建议: 核心特点 React泡沫中底提供出色的能量回馈和缓震效果…

react项目如何调试

react项目如何调试

使用浏览器开发者工具 React项目调试最直接的方法是使用浏览器内置的开发者工具(Chrome DevTools/Firefox Developer Tools)。打开开发者工具后,切换到“Sourc…