(See nkbt#57 for details.)
This fork will be kept for a while since it has been referenced in a project to work around the bug, but will be deleted sometime.
React component that renders an Input, Textarea or other element with debounced onChange.
Can be used as drop-in replacement for <input type="text" /> or <textarea />
npm install --save react react-debounce-inputDon't forget to manually install peer dependencies (react) if you use npm@3.
bower install --save https://unpkg.com/react-debounce-input/bower.zip<script src="https://unpkg.com/react/dist/react.js"></script>
<script src="https://unpkg.com/react-debounce-input/build/react-debounce-input.js"></script>
(Module exposed as `DebounceInput`)http://nkbt.github.io/react-debounce-input
http://codepen.io/nkbt/pen/VvmzLQ
import React from 'react';
import ReactDOM from 'react-dom';
import DebounceInput from 'react-debounce-input';
const App = React.createClass({
getInitialState() {
return {
value: ''
};
},
render() {
return (
<div>
<DebounceInput
minLength={2}
debounceTimeout={300}
onChange={event => this.setState({value: event.target.value})} />
<p>Value: {this.state.value}</p>
</div>
);
}
});
const appRoot = document.createElement('div');
document.body.appendChild(appRoot);
ReactDOM.render(<App />, appRoot);You can specify element="textarea". For Example:
<DebounceInput element="textarea" />Will result in
<textarea />Note: when rendering a <textarea /> you may wish to set forceNotifyByEnter = {false} so the user can make new lines without forcing notification of the current value.
This package has only been tested with <input /> and <textarea /> but should work with any element which has value and onChange props.
You can also use a custom react component as the element. For Example:
<DebounceInput element={CustomReactComponent} />Will result in
<CustomReactComponent />Function called when value is changed (debounced) with original event passed through
Value of the Input box. Can be omitted, so component works as usual non-controlled input.
Minimal length of text to start notify, if value becomes shorter then minLength (after removing some characters), there will be a notification with empty value ''.
Notification debounce timeout in ms. If set to -1, disables automatic notification completely. Notification will only happen by pressing Enter then.
Notification of current value will be sent immediately by hitting Enter key. Enabled by-default. Notification value follows the same rule as with debounced notification, so if Length is less, then minLength - empty value '' will be sent back.
NOTE if onKeyDown callback prop was present, it will be still invoked transparently.
Same as forceNotifyByEnter, but notification will be sent when focus leaves the input field.
<DebounceInput
type="number"
onChange={event => this.setState({value: event.target.value})}
placeholder="Name"
className="user-name" />Will result in
<input
type="number"
placeholder="Name"
className="user-name" />Currently is being developed and tested with the latest stable Node 6 on OSX and Windows.
To run example covering all DebounceInput features, use npm start dev, which will compile src/example/Example.js
git clone [email protected]:nkbt/react-debounce-input.git
cd react-debounce-input
npm install
npm start dev
# then
open http://localhost:8080# to run tests
npm start test
# to generate test coverage (./reports/coverage)
npm start test.cov
# to run end-to-end tests
npm start test.e2eMIT
