react-minisearch
v7.1.3
Published
React integration for MiniSearch
Downloads
36,913
Readme
React MiniSearch
React integration for the MiniSearch client side full-text search library.
Getting Started
Installation:
First, make sure you have a compatible version of React and of MiniSearch installed.
Then, install via NPM or Yarn:
# With NPM:
npm install react-minisearch
# Or with Yarn:
yarn add react-minisearch
Usage:
There are three main ways to use react-minisearch
: the useMiniSearch
hook, the withMiniSearch
higher-order component, or the WithMiniSearch
wrapper component.
All three way take the following arguments (or props for the wrapper component):
- The initial collection of documents to add to the index. Note: this is just
the initial collection, and mutating this argument won't cause reindexing.
To add or remove documents after initialization, use the functions
add
/addAll
/remove
/removeAll
/discard
, etc. - The
MiniSearch
configuration options
Using the useMiniSearch hook:
import { useMiniSearch } from 'react-minisearch'
// Documents to search amongst
const documents = [
{ id: 1, name: 'Agata' },
{ id: 2, name: 'Finn' },
// …etc
]
// See MiniSearch for documentation on options
const miniSearchOptions = { fields: ['name'] }
const MyComponent = () => {
const { search, searchResults } = useMiniSearch(documents, miniSearchOptions)
const handleSearchChange = (event) => {
search(event.target.value)
}
return (
<div>
<input type='text' onChange={handleSearchChange} placeholder='Search…' />
<ol>
<h3>Results:</h3>
{
searchResults && searchResults.map((result, i) => {
return <li key={i}>{ result.name }</li>
})
}
</ol>
</div>
)
}
Using the withMiniSearch higher-order component:
import { withMiniSearch } from 'react-minisearch'
const MyComponent = ({ search, searchResults }) => {
const handleSearchChange = (event) => {
search(event.target.value)
}
return (
<div>
<input type='text' onChange={handleSearchChange} placeholder='Search…' />
<ol>
<h3>Results:</h3>
{
searchResults && searchResults.map((result, i) => {
return <li key={i}>{ result.name }</li>
})
}
</ol>
</div>
)
}
// Documents to search amongst
const documents = [
{ id: 1, name: 'Agata' },
{ id: 2, name: 'Finn' },
// …etc
]
// See MiniSearch for documentation on options
const miniSearchOptions = { fields: ['name'] }
const MyComponentWithSearch = withMiniSearch(documents, miniSearchOptions, MyComponent)
Using the WithMiniSearch wrapper component:
import { WithMiniSearch } from 'react-minisearch'
// Documents to search amongst
const documents = [
{ id: 1, name: 'Agata' },
{ id: 2, name: 'Finn' },
// …etc
]
// See MiniSearch for documentation on options
const miniSearchOptions = { fields: ['name'] }
const MyComponent = () => (
<WithMiniSearch documents={documents} options={miniSearchOptions}>
{
({ search, searchResults }) => {
const handleSearchChange = (event) => {
search(event.target.value)
}
return (
<div>
<input type='text' onChange={handleSearchChange} placeholder='Search…' />
<ol>
<h3>Results:</h3>
{
searchResults && searchResults.map((result, i) => {
return <li key={i}>{ result.name }</li>
})
}
</ol>
</div>
)
}
}
</WithMiniSearch>
)
Provided props:
The complete set of props that are provided by react-minisearch
is the same
for all three ways (useMiniSearch
, withMiniSearch
, or WithMiniSearch
):
search(query: string, searchOptions?: SearchOptions) => void
: function to be called in order to perform the searchsearchResults: T[] | null
: array of search results, ornull
when no search was performed or search was clearedrawResults: SearchResult[] | null
: array of raw search results from MiniSearch, including scores and match information, ornull
when no search was performed or search was clearedclearSearch() => void
: function to be called in order to clear the search (settingsearchResults
tonull
)autoSuggest(query: string, searchOptions?: SearchOptions) => void
: function to be called in order to obtain auto suggestionssuggestions: Suggestion[] | null
: array of auto suggestions, ornull
when auto suggestions are not used or clearedclearSuggestions() => void
: function to be called in order to clear the suggestions (settingsuggestions
tonull
)add(document: T) => void
: function to add a new document to the indexaddAll(documents: T[]) => void
: function to add several new documents to the index in bulkaddAllAsync(documents: T[], options?: object) => Promise<void>
: same asaddAll
, but works asynchronously and in batches to avoid blocking the UIgetById(id: any) => T | null
: function to retrieve a document from the index by its IDremove(document: T) => void
: function to remove a document from the indexremoveById(id: any) => void
: function to remove a document from the index by its IDremoveAll(documents?: T[]) => void
: function to remove several documents, or all documents, from the indexdiscard(id: any) => void
: discard a document by its ID (same asremoveById
)discardAll(ids: readonly any[]) => void
: discard several documents at once, by their IDreplace(document: T) => void
: replace an existing document with a new version of itisIndexing: boolean
: set totrue
when indexing viaaddAllAsync
is in progress,false
otherwiseminiSearch: MiniSearch
: theMiniSearch
instance, for the (rare) cases when it is necessary to use it directly
In this list, the type T
is a generic type that refers to the type of the document being indexed.
Many of these props correspond to methods on the MiniSearch
class, as
documented in the MiniSearch
library.
Examples
Check out the examples
directory for a complete usage example. To run the
example app locally:
cd
to theexamples
directory- Install dependencies with
yarn install
(ornpm install
) - Run the example application with
yarn start
(ornpm run start
)