调用onClick ReactJS的多个函数


116

我知道在香草js中,我们可以做到

onclick="f1();f2()"

在ReactJS中进行两个函数onClick的等效操作是什么?

我知道调用一个函数是这样的:

onClick={f1}

非常简单:传递一个调用这两个函数的函数,就像使用ele.onclick = ...or一样addEventListener
Felix Kling 2014年

如果您的第一个函数是setState,并且需要确保在第二个函数运行之前已经发生/考虑到了这一点,那么您会发现此帖子非常有帮助:medium.com/better-programming / ...
Nasia Makrygianni

Answers:


217

将两个函数调用包装在另一个函数/方法中。这是该想法的几个变体:

1)分开的方法

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

或使用ES6类:

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

2)内联

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

或等效于ES6:

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

5
或更不理想:onclick={function() { f1(); f2(); }}
Felix Kling 2014年

47
或者在ES6onclick={()=>{ f1(); f2() }}
亚历杭德罗·席尔瓦

2
或在cjsx中:onClick={ () => f1(); f2() }
Vadorequest '16

2
如果第一个是异步..i我希望第二个仅在第一个成功完成后才执行,该怎么办
Ratnabh kumar rai

1
@Ratnabhkumarrai这是与React无关的另一个问题。这全都与JS中的异步有关,Promises可能正是您正在寻找的答案。
Emile Bergeron

11

也许您可以使用箭头函数(ES6 +)或简单的旧函数声明。

普通函数声明类型(非ES6 +):

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

匿名功能或箭头功能类型(ES6 +

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

第二条是我所知道的最短的道路。希望对您有帮助!


6

在onClick上为任何元素调用多个函数,您可以创建一个包装函数,如下所示。

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

这些函数可以定义为父类上的方法,然后从包装函数中调用。

您可能具有将导致像这样的onChange的主要元素,

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

0

onclick={()=>{ f1(); f2() }}如果我想同时使用两个不同的功能,这对我很有帮助。但是现在我想只用一个按钮创建一个录音机。因此,如果我首先单击,我想运行StartFunction f1(),如果我再次单击,则我想运行StopFunction f2()

你们如何认识到这一点?


关于生成器的功能?您可以用一个在条件内变化的变量来决定,该变量在其后具有一个函数,然后调用所需的函数以产生收益
Nikolas Freitas Mr Nik Nik

const play = () => { console.log("played"); } const pause = () => { console.log("paused"); } function* audioSwitcher() { let paused = true; while (true) { if(paused) { play(); } else { pause(); } yield paused = !paused; } }
Nikolas Freitas Nik先生,

0

您可以使用嵌套。

有两个函数是一个openTab(),另一个是closeMobileMenue(),首先我们openTab()在内部调用并调用另一个函数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}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.