Socket
Socket
Sign inDemoInstall

react-debounce-component

Package Overview
Dependencies
0
Maintainers
1
Versions
1
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

    react-debounce-component

Debounce input, search, render, functions or anything else with <Debounce/> in React and React Native


Version published
Weekly downloads
218
increased by1.87%
Maintainers
1
Created
Weekly downloads
 

Readme

Source

react-debounce-component

Debounce any component with React or React Native

<input>
<Debounce ms={500}>
  <List/>
</Debounce>

Tiny: react-debounce-component is very tiny, fast and does not require any other package. Overall it has under 70 lines of code.

Generic: You can debounce almost anything you want: input, search, render, functional components, fetch, api calls, ... It works with react and react-native.

Easy: Think In React not JS. Most other solution work with functions, but this is a <Component>. It makes the code easier to understand and less error-prone. Just put what you want to debounce inside <Debounce>here</Debounce> of your render function and you're good.

Install

npm install react-debounce-component --save

or use yarn.

Examples

Example 1

This is the most simple example. It just debounces the output of <input> for one second.

import React from 'react';
import Debounce from 'react-debounce-component';

class App extends React.Component {
  constructor (props) {
    super(props);
    this.state = {value: 'Hello'}
  }
  render () {
    return (
      <div>
        <input value={this.state.value} onChange={(event) => {this.setState({value: event.target.value})}}/>
        <Debounce ms={1000}>
          <div>{this.state.value}</div>
        </Debounce>
      </div>
    );
  }
}

export default App;

Example 2

This is a more common scenario, where a list gets fetched from the web.

Expand

import React from 'react';
import Debounce from 'react-debounce-component';

class App extends React.Component {
  constructor (props) {
    super(props);
    this.state = {value: ''}
  }
  render () {
    return (
      <div>
        <input value={this.state.value} onChange={event => this.setState({value: event.target.value})}/>
        <Debounce ms={1000}>
          <List search={this.state.value}/>
        </Debounce>
      </div>
    );
  }
}

class List extends React.Component {
  constructor (props) {
    super(props);
    this.state = {items: []};
  }
  componentDidUpdate (prevProps) {
    if (prevProps !== this.props) { // Prevent rendering after setState()
      fetch('https://api.publicapis.org/entries?title=' + this.props.search)
        .then(res => res.json())
        .then(result => this.setState({items: result.entries || []}));
    }
  }
  render () {
    return (
      <ul>
        {this.state.items.map(item => (
          <li key={item.Link}>
            {item.API} {item.Link}
          </li>
        ))}
      </ul>
    );
  }
}

export default App;

Props

ms

Time to wait (delay) in milliseconds until the component inside <Debounce> gets rendered.

requiredno
default250
 typenumber

initialComponent

What to display on first render (mount). Default is to render the children immediately (e.g. fetch immediately)

Tip: put in null to prevent rendering the children on mount

requiredno
defaultchildren
typecomponent

Supports React version 16.0.0 and higher. Should even work with 0.13.0 and higher.


License

react-debounce-component is MIT licensed.

Keywords

FAQs

Last updated on 09 Nov 2019

Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc