เรียกใช้หลายฟังก์ชันบนคลิก ReactJS


119

ฉันรู้ว่าใน vanilla js เราทำได้

onclick="f1();f2()"

อะไรจะเทียบเท่ากับการเรียกใช้ฟังก์ชันสองฟังก์ชัน onClick ใน ReactJS

ฉันรู้ว่าการเรียกฟังก์ชันหนึ่งเป็นแบบนี้:

onClick={f1}

ง่ายมาก: ผ่านฟังก์ชั่นที่เรียกทั้งสองฟังก์ชั่นเช่นเดียวกับที่คุณจะไปด้วยหรือele.onclick = ... addEventListener
Felix Kling

ในกรณีที่ฟังก์ชันที่ 1 ของคุณคือ setState และคุณต้องตรวจสอบให้แน่ใจว่าสิ่งนี้เกิดขึ้น / ถูกนำมาพิจารณาก่อนที่ฟังก์ชันที่ 2 จะทำงานคุณจะพบว่าโพสต์นี้มีประโยชน์มาก: medium.com/better-programming/…
Nasia Makrygianni

คำตอบ:


220

รวมการเรียกฟังก์ชัน two + ของคุณไว้ในฟังก์ชัน / วิธีการอื่น แนวคิดดังกล่าวมีสองรูปแบบดังนี้

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

48
หรือใน ES6onclick={()=>{ f1(); f2() }}
Alejandro Silva

2
หรือใน cjsx:onClick={ () => f1(); f2() }
Vadorequest

2
จะเกิดอะไรขึ้นถ้าอันแรกเป็นแบบอะซิงโครนัส .. ฉันต้องการให้ตัวที่สองดำเนินการหลังจากตัวแรกสำเร็จเท่านั้น
Ratnabh kumar rai

1
@Ratnabhkumarrai นั่นคือความกังวลอื่น ๆ ที่ไม่เกี่ยวข้องกับ React ทุกอย่างเกี่ยวกับ async ใน JS และPromisesอาจเป็นคำตอบที่คุณกำลังมองหา
Emile Bergeron

12

บางทีคุณอาจใช้ฟังก์ชันลูกศร (ES6 +) หรือการประกาศฟังก์ชันเก่า ๆ

ประเภทการประกาศฟังก์ชันปกติ ( ไม่ใช่ ES6 + ):

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

ฟังก์ชันไม่ระบุชื่อหรือประเภทฟังก์ชันลูกศร ( ES6 + )

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

เส้นทางที่สองเป็นถนนที่สั้นที่สุดที่ฉันรู้จัก หวังว่ามันจะช่วยคุณได้!


7

การเรียกใช้หลายฟังก์ชันใน onClick สำหรับองค์ประกอบใด ๆ คุณสามารถสร้างฟังก์ชัน Wrapper ได้เช่นนี้

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

ฟังก์ชันเหล่านี้สามารถกำหนดเป็นวิธีการบนคลาสแม่และเรียกใช้จากฟังก์ชัน Wrapper

คุณอาจมีองค์ประกอบหลักที่จะทำให้เกิด onChange เช่นนี้

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

0

สิ่งนี้onclick={()=>{ f1(); f2() }}ช่วยฉันได้มากถ้าฉันต้องการฟังก์ชันที่แตกต่างกันสองอย่างในเวลาเดียวกัน แต่ตอนนี้ฉันต้องการสร้าง Audiorecorder ด้วยปุ่มเดียว ดังนั้นถ้าฉันคลิกแรกที่ฉันต้องการที่จะทำงาน StartFunction f1()และถ้าฉันคลิกอีกครั้งแล้วฉันต้องการที่จะทำงาน f2()StopFunction

พวกคุณตระหนักถึงสิ่งนี้ได้อย่างไร?


เกี่ยวกับฟังก์ชั่นกับเครื่องกำเนิดไฟฟ้าหรือไม่? คุณสามารถตัดสินใจโดยใช้ตัวแปรที่เปลี่ยนแปลงภายในเงื่อนไขที่มีฟังก์ชันตามมาจากนั้นเรียกใช้ฟังก์ชันที่คุณต้องการด้วยผลตอบแทน
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

คุณสามารถใช้แบบซ้อน

มีฟังก์ชั่นการดึงหนึ่ง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}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.