react-pick

Accessible autocompletion components (e.g. typeahead inputs, popups, and comboboxes), implemented in React.
Intially derived from Ryan Florence's awesome react-autocomplete.
Demos
Installation & Usage
npm install react-pick
You'll need to make sure you're including the styles.css
file in the root of the npm module in your app somehow. Or write your own, better stylesheet.
What's inside?
For out-of-the-box usage:
<Combobox>
- Supports find displaying asynchronous autocomplete suggestions inline as "type ahead" text, as a popup menu, and as both at once. Supports keyboard navigation, and seeks to be WAI-ARIA compliant.
For customizing <Combobox>
and creating your own components:
<TypeaheadInput>
- An <input>
that robustly inserts "type ahead" text.
<InputWithPopup>
- Attaches a popup to an <input>
.
<List>
- A popup for rendering a list of possible completion options.
<ListOption>
- The default component for rendering options in <ListPopup>
.
How do you use <Combobox>
?
Pretty much the same way you would the <input>
component in React, but with an extra getOptionsForInputValue
property to fetch autocompletion options.
var React = require('react');
var {Combobox} = require('react-pick');
var AWESOME_PEOPLE = [
'Ryan Florence',
'Pete Hunt',
'Jonathan Wilde'
];
var MyAppWithACombobox = React.createClass({
getInitialState: function() {
return {value: null};
},
getOptionsForInputValue: function(inputValue) {
return new Promise(function(resolve, reject) {
inputValue = inputValue.toLowerCase();
resolve(
AWESOME_PEOPLE
.map((person) => person.toLowerCase())
.filter((person) => person.indexOf(inputValue) === 0)
);
});
},
handleChange: function(newValue) {
this.setState({value: newValue});
},
render: function() {
<div className="app">
<Combobox
getOptionsForInputValue={this.getOptionsForInputValue}
onChange={this.handleChange}
value={this.state.value}
/>
<p>Selection: {this.state.value}</p>
</div>
}
});
Check out more examples.
v0.5.0 (2015-04-04)
There's no longer use of cloneWithProps
, which makes the library more predictable in certain use cases.
CHANGES
ListPopup
and ListPopupOption
are now List
and ListOption
InputPopupWrapper
has been replaced with the much cleaner InputWithPopup
which does not use cloneWithProps
ListKeyBindings
no longer uses cloneWithProps
BUGFIXES
Combobox
should be much more resilient to external changes of value
.