Skip to content

dush-ik/React-Event-Handling

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 

Repository files navigation

React Event Handling

Event Handling with Parameter.

There are two ways to bind event handler in jsx.

1. Using bind function in constructor.

  export default class SomeClass extends React.Component{
    constructor(props){
      super(props)
      this.clickMe = this.clickMe.bind(this); 
    }

    clickMe(event){
      //do stuff
    }

    render(){
      <div>
        <button onClick={this.clickMe}>Click</button>
      </div>
    }
  }

2. Using arrow function in code.

  export default class SomeClass extends React.Component{
    constructor(props){
      super(props)
    }
      
    clickMe = (event) =>{
      //do stuff
    }
      
    render(){
      <div>
        <button onClick={this.clickMe}>Click</button>
      </div>
    }
  }

But What if we want to pass some parameters in the bound function?

We can use currying in arrow function.

  export default SomeClass extends React.Component{
    constructor(props){
      super(props)
    }

    clickMe = (param) => (event) =>{
      //do stuff
    }

    render(){
      <div>
        <button onClick={this.clickMe('someParam')}>Click</button>
      </div>
    }
  }

However in this scenario, each time render() gets called, clickMe() returns a new function.

We can solve this issue with a memoization function.

  export function memoiz(funct){
    let cache = {};
    return function (){
      let aArgs = Array.prototype.slice.call(arguments);
      let key = JSON.stringify(aArgs);
      if(cache[key]){
        return cache[key];
      }else{
        return (cache[key] = funct.apply(this, aArgs));
      }
    }
  }

Now we can use this function into our component.

  export default SomeClass extends React.Component{
    constructor(props){
      super(props)
    }

    clickMe = memoiz((param) => (event) =>{
      //do stuff
    })

    render(){
      <div>
        <button onClick={this.clickMe('someParam')}>Click</button>
      </div>
    }
  }

Releases

No releases published

Packages