Lightweight fuzzy search highlighting component using
fuse.js
.
This component wraps fuse.js
and provides matched and unmatched text in an iterable format.
# Yarn
yarn add react-fuzzy-highlighter
# npm
npm i react-fuzzy-highlighter
# pnpm
pnpm i react-fuzzy-highlighter
import * as React from "react";
import FuzzyHighlighter, { Highlighter } from "react-fuzzy-highlighter";
export default class extends React.Component {
render() {
return (
<FuzzyHighlighter
query="old"
data={[
{ title: "Old Man's War" },
{ title: "The Lock Artist" },
{ title: "HTML5" },
]}
options={{
shouldSort: true,
includeMatches: true,
threshold: 0.6,
location: 0,
distance: 100,
maxPatternLength: 32,
minMatchCharLength: 1,
keys: ["title"],
}}
>
{({ results, formattedResults, timing }) => {
return (
<ul>
{formattedResults.map((formattedResult, resultIndex) => {
if (formattedResult.formatted.title === undefined) {
return null;
}
return (
<li key={resultIndex}>
<Highlighter text={formattedResult.formatted.title} />
</li>
);
})}
</ul>
);
}}
</FuzzyHighlighter>
);
}
}
The examples folder contains the source code used for the demo.