複数の関数onClick ReactJSを呼び出す


116

バニラjsで知っている、私たちができる

onclick="f1();f2()"

ReactJSでonClickの2つの関数呼び出しを行うことと同等のものは何ですか

私は1つの関数を呼び出すことがこのようなものであることを知っています:

onClick={f1}

非常に単純です:ele.onclick = ...またはで行うように、2つの関数を呼び出す関数を渡しますaddEventListener
Felix Kling 2014

場合にはあなたの第一の機能は、SETSTATEであり、あなたは必ずこれが起こっている/第二の機能を実行する前に考慮にする必要があり、あなたがこの記事は非常に参考になります。medium.com/better-programming/...
Nasia Makrygianni

回答:


217

2つ以上の関数呼び出しを別の関数/メソッドでラップします。そのアイデアのいくつかの変形があります:

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

47
またはES6でonclick={()=>{ f1(); f2() }}
Alejandro Silva

2
またはcjsx:onClick={ () => f1(); f2() }
Vadorequest '31年

2
最初のものが非同期である場合..i最初のものが正常に完了した後でのみ2番目のものを実行したい場合
Ratnabh kumar rai

1
@Ratnabhkumarraiそれは、Reactとは無関係のまったく別の問題です。それはすべてJSの非同期に関するものでありPromises、おそらくあなたが探していた答えです。
エミールベルジェロン

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>

2つ目は、私が知っている最短の道路です。お役に立てば幸いです。


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() }}は、2つの異なる機能を同時に使用する場合に非常に役立ちました。しかし、今はボタンが1つだけのオーディオレコーダーを作成したいと思います。したがって、最初にf1()クリックした場合はStartFunctionを実行し、もう一度クリックした場合はStopFunction を実行しますf2()

どうやってこれを実現しますか?


ジェネレーター付きの関数についてはどうですか?その後に関数がある条件内で変化する変数を決定し、必要な関数をyieldで呼び出すことができます
Nikolas Freitas Mr 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 Mr Nik

0

ネストして使用できます。

2つの関数がopenTab()あり、もう1つは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}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.