user2554585
user2554585

Reputation: 3669

Call multiple functions onClick ReactJS

I know in vanilla JavaScript, we can do:

onclick="f1();f2()"

What would be the equivalent for making two function calls onClick in ReactJS?

I know calling one function is like this:

onClick={f1}

Upvotes: 227

Views: 512965

Answers (11)

Jay Joshi
Jay Joshi

Reputation: 1562

A simple one-liner:

onClick={ () => f1() ||  f2() } 

Upvotes: 0

Ivan K.
Ivan K.

Reputation: 1094

React Functional components

             <button
                onClick={() => {
                  cancelOrder();
                  handlerModal();
                }}
             >
                Cancel
             </button>

Upvotes: 24

Mithlesh Patel
Mithlesh Patel

Reputation: 51

If you have to apply two function on a button click at the same time, then we can simply add like this in React js.

<button onClick={()=> {fun1(); fun2()}}>Show more</button>

Upvotes: 4

Abu Sayed
Abu Sayed

Reputation: 187

//Don't do this way
function App() {
  return (
    <div>
      <button
        onClick={() => {
          console.log('hello');
          console.log('world');
        }}>
        I'm a button
      </button>
    </div>
  );
}

//Do this way
function App() {

  function fun1() {
    console.log('hello');
  }

  function fun2() {
    console.log('world');
  }

  return (
    <div>
      <button onClick={() => {fun1();fun2();}}>Click</button>
    </div>
  );
}

Upvotes: 2

Aun Shahbaz Awan
Aun Shahbaz Awan

Reputation: 775

Best Way:

onClick={ () => { f1(); f2();} }

Upvotes: 10

saran
saran

Reputation: 368

Let say you have a button and you want to execute two onClick events, to show the hidden text and hide the button with just 1 click.

let a = 'invisible'
  let b = 'visible'
  const [show, setShow] = useState(a)
  const [buttonshow, setButtonShow] = useState(b)

<button onClick={() => {setButtonShow(a); setShow(b)}}>Read More</button>
<p>This text will show after you press the button Read more and Read
more will be hidden from the DOM
</p>

as you see, the anonymous function just returned two functions.

{setButtonShow(a); setShow(b)}

Upvotes: 2

Angelo Mien
Angelo Mien

Reputation: 29

You can simply wrapped it inside []. This will worked as well in material UI button.

<Button onClick={(event) => [function1(), function2()]}>Click Me</Button>

Click to see sample code

Click to see the output

Upvotes: 2

Ankit Kumar Rajpoot
Ankit Kumar Rajpoot

Reputation: 5590

You can use nested.

There are tow function one is openTab() and another is closeMobileMenue(), Firstly we call openTab() and call another function inside closeMobileMenue().

function openTab() {
    window.open('https://play.google.com/store/apps/details?id=com.drishya');
    closeMobileMenue()   //After open new tab, Nav Menue will close.  
}

onClick={openTab}

Upvotes: 0

Rob M.
Rob M.

Reputation: 36511

Wrap your two+ function calls in another function/method. Here are a couple variants of that idea:

1) Separate method

var Test = React.createClass({
   onClick: function(event){
      func1();
      func2();
   },
   render: function(){
      return (
         <a href="#" onClick={this.onClick}>Test Link</a>
      );
   }
});

or with ES6 classes:

class Test extends React.Component {
   onClick(event) {
      func1();
      func2();
   }
   render() {
      return (
         <a href="#" onClick={this.onClick}>Test Link</a>
      );
   }
}

2) Inline

<a href="#" onClick={function(event){ func1(); func2()}}>Test Link</a>

or ES6 equivalent:

<a href="#" onClick={() => { func1(); func2();}}>Test Link</a>

Upvotes: 366

Nikolas Freitas Mr Nik
Nikolas Freitas Mr Nik

Reputation: 421

Maybe you can use arrow function (ES6+) or the simple old function declaration.

Normal function declaration type (Not ES6+):

<link href="#" onClick={function(event){ func1(event); func2();}}>Trigger here</link>

Anonymous function or arrow function type (ES6+)

<link href="#" onClick={(event) => { func1(event); func2();}}>Trigger here</link>

The second one is the shortest road that I know. Hope it helps you!

Upvotes: 31

Ashish Singh
Ashish Singh

Reputation: 754

Calling multiple functions on onClick for any element, you can create a wrapper function, something like this.

wrapperFunction = () => {
    //do something
    function 1();
    //do something
    function 2();
    //do something
    function 3();
}

These functions can be defined as a method on the parent class and then called from the wrapper function.

You may have the main element which will cause the onChange like this,

<a href='#' onClick={this.wrapperFunction}>Some Link</a>

Upvotes: 16

Related Questions