React component that renders filtering Input
npm install --save react react-text-filter
Don't forget to manually install peer dependencies (react
) if you use npm@3.
<script src="https://unpkg.com/react/dist/react.js"></script>
<script src="https://unpkg.com/react-text-filter/build/react-text-filter.js"></script>
(Module exposed as `TextFilter`)
http://nkbt.github.io/react-text-filter
http://codepen.io/nkbt/pen/ZGmpoO
import React, {PropTypes} from 'react';
import ReactDOM from 'react-dom';
import {TextFilter} from 'react-text-filter';
const Item = React.createClass({
propTypes: {
item: PropTypes.string.isRequired
},
render() {
return <li>{this.props.item}</li>;
}
});
const List = React.createClass({
propTypes: {
items: PropTypes.arrayOf(PropTypes.string).isRequired
},
render() {
const Items = this.props.items.map(item => <Item key={item} item={item} />);
return <ul>{Items}</ul>;
}
});
const fruits = [
'apple',
'orange',
'banana',
'kiwi',
'pineapple',
'golden kiwi',
'green apple'
];
const fruitFilter = filter => fruit => fruit.toLowerCase().indexOf(filter.toLowerCase()) !== -1;
const App = React.createClass({
getInitialState() {
return {filter: ''};
},
render() {
const filteredFruits = this.state.filter ?
fruits.filter(fruitFilter(this.state.filter)) :
fruits.slice(0);
return (
<div>
<TextFilter onFilter={({target: {value: filter}}) => this.setState({filter})} />
<List items={filteredFruits} />
</div>
);
}
});
const appRoot = document.createElement('div');
document.body.appendChild(appRoot);
ReactDOM.render(<App />, appRoot);
Function called when filter is changed (debounced) with original event passed through
Initial filter value
Minimal length of text to start notify
Notification debounce timeout in ms
<TextFilter
onFilter={({target: {value: filter}}) => this.setState({filter})}
placeholder="Filter"
className="my-filter" />
Will result in
<input type="text"
placeholder="Filter"
className="my-filter" />
MIT