当前位置:首页 > React

react实现模糊搜索

2026-01-27 02:29:46React

实现模糊搜索的方法

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

使用fuse.js实现模糊搜索

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

安装fuse.js:

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;

自定义模糊搜索实现

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

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
分享给朋友:

相关文章

react如何取消渲染

react如何取消渲染

取消渲染的方法 在React中,取消渲染通常指的是在某些条件下阻止组件渲染或中断正在进行的渲染过程。以下是几种常见的方法: 条件渲染 通过条件判断决定是否渲染组件或部分内容。可以使用if语句或三元运…

电脑如何安装react

电脑如何安装react

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

react 如何引入jquery

react 如何引入jquery

引入 jQuery 到 React 项目 在 React 项目中引入 jQuery 可以通过多种方式实现,但需要注意 React 和 jQuery 操作 DOM 的方式可能冲突,因此建议仅在必要时使用…

vue实现模糊

vue实现模糊

Vue实现模糊搜索的方法 在Vue中实现模糊搜索功能,可以通过多种方式完成。以下是几种常见的方法: 使用JavaScript的filter和includes方法 <template>…

react如何迭代

react如何迭代

在 React 中迭代数组或对象 React 提供了多种方式来处理数组或对象的迭代,以下是常见的方法: 使用 map 方法迭代数组 map 是 JavaScript 数组的内置方法,常用于在 Re…

react如何发音

react如何发音

React的发音 React的正确发音为 /riˈækt/,类似于“ree-akt”。以下是详细说明: 发音分解 第一个音节“Ree”发音类似英文单词“see”中的“ee”音。…