当前位置:首页 > React

react实现模糊搜索

2026-01-27 02:29:46React

实现模糊搜索的方法

在React中实现模糊搜索可以通过多种方式完成,常见的方法是使用第三方库如fuse.js或自定义搜索逻辑。以下是几种常见的方法:

使用fuse.js实现模糊搜索

fuse.js是一个轻量级的模糊搜索库,支持模糊匹配、权重设置等高级功能。

安装fuse.js:

react实现模糊搜索

npm install fuse.js

示例代码:

import React, { useState } from 'react';
import Fuse from 'fuse.js';

const data = [
  { name: 'Apple', category: 'Fruit' },
  { name: 'Banana', category: 'Fruit' },
  { name: 'Carrot', category: 'Vegetable' },
];

function FuzzySearch() {
  const [searchTerm, setSearchTerm] = useState('');
  const [results, setResults] = useState(data);

  const fuse = new Fuse(data, {
    keys: ['name', 'category'],
    includeScore: true,
    threshold: 0.4,
  });

  const handleSearch = (term) => {
    setSearchTerm(term);
    if (!term) {
      setResults(data);
      return;
    }
    const searchResults = fuse.search(term);
    setResults(searchResults.map(result => result.item));
  };

  return (
    <div>
      <input
        type="text"
        value={searchTerm}
        onChange={(e) => handleSearch(e.target.value)}
        placeholder="Search..."
      />
      <ul>
        {results.map((item, index) => (
          <li key={index}>{item.name} - {item.category}</li>
        ))}
      </ul>
    </div>
  );
}

export default FuzzySearch;

自定义模糊搜索实现

如果不希望使用第三方库,可以通过简单的字符串匹配实现基本模糊搜索:

react实现模糊搜索

import React, { useState } from 'react';

const data = ['Apple', 'Banana', 'Carrot', 'Avocado'];

function CustomFuzzySearch() {
  const [searchTerm, setSearchTerm] = useState('');
  const [results, setResults] = useState(data);

  const handleSearch = (term) => {
    setSearchTerm(term);
    if (!term) {
      setResults(data);
      return;
    }
    const filtered = data.filter(item =>
      item.toLowerCase().includes(term.toLowerCase())
    );
    setResults(filtered);
  };

  return (
    <div>
      <input
        type="text"
        value={searchTerm}
        onChange={(e) => handleSearch(e.target.value)}
        placeholder="Search..."
      />
      <ul>
        {results.map((item, index) => (
          <li key={index}>{item}</li>
        ))}
      </ul>
    </div>
  );
}

export default CustomFuzzySearch;

使用正则表达式实现高级匹配

对于更复杂的模糊匹配需求,可以使用正则表达式:

const handleSearch = (term) => {
  setSearchTerm(term);
  if (!term) {
    setResults(data);
    return;
  }
  const pattern = term.split('').map(char => `(?=.*${char})`).join('');
  const regex = new RegExp(pattern, 'i');
  const filtered = data.filter(item => regex.test(item));
  setResults(filtered);
};

性能优化建议

对于大型数据集,建议对搜索逻辑进行防抖处理,避免频繁触发搜索:

import { debounce } from 'lodash';

const debouncedSearch = debounce(handleSearch, 300);

<input
  type="text"
  onChange={(e) => debouncedSearch(e.target.value)}
/>

样式和用户体验

添加加载状态和空结果提示可以提升用户体验:

{results.length === 0 && <p>No results found</p>}

以上方法可以根据具体需求选择或组合使用,fuse.js适合需要高级模糊匹配的场景,而自定义实现则更适合简单需求。

标签: 模糊react
分享给朋友:

相关文章

react moment如何使用

react moment如何使用

安装 react-moment 通过 npm 或 yarn 安装 react-moment: npm install react-moment 或 yarn add react-moment 基本…

react如何开发组件

react如何开发组件

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

react性能如何

react性能如何

React 性能特点 React 通过虚拟 DOM(Virtual DOM)和高效的 diff 算法优化性能。虚拟 DOM 减少了直接操作真实 DOM 的开销,仅在必要时更新变化的部分。React 的…

react如何运行

react如何运行

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

如何运行react

如何运行react

运行 React 项目的步骤 安装 Node.js 和 npm 确保系统已安装 Node.js(包含 npm)。可通过官网 Node.js 下载并安装最新稳定版本。安装完成后,验证版本: node…

react 如何启动

react 如何启动

创建 React 项目 使用官方工具 create-react-app 快速初始化项目,需提前安装 Node.js(版本 ≥ 14.0.0)和 npm/yarn: npx create-react-…