调用多个函数 onClick ReactJS

Posted

技术标签:

【中文标题】调用多个函数 onClick ReactJS【英文标题】:Call multiple functions onClick ReactJS 【发布时间】:2014-11-22 00:52:02 【问题描述】:

我知道在原生 javascript 中,我们可以做到:

onclick="f1();f2()"

在 ReactJS 中进行两个函数调用 onClick 的等价物是什么?

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

onClick=f1

【问题讨论】:

非常简单:传递一个调用这两个函数的函数,就像使用ele.onclick = ...addEventListener 一样。 如果您的第一个函数是 setState 并且您需要确保在第二个函数运行之前发生/考虑到这一点,您会发现这篇文章很有帮助:medium.com/better-programming/… 【参考方案1】:

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

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>

【讨论】:

或不太理想:onclick=function() f1(); f2(); 或者在 ES6 中 onclick=()=&gt; f1(); f2() 或在 cjsx 中:onClick= () =&gt; f1(); f2() 如果第一个是异步的..我希望第二个只有在第一个成功完成后才能执行 @Ratnabhkumarrai 这是与 React 无关的另一个问题。这都是关于 JS 中的异步和 Promises are probably the answer you were looking for.【参考方案2】:

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

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

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

匿名函数或箭头函数类型(ES6+

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

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

【讨论】:

【参考方案3】:

在 onClick 上为任何元素调用多个函数,您可以创建一个包装函数,类似这样。

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

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

你可能有这样的主要元素会导致 onChange,

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

【讨论】:

【参考方案4】:

假设你有一个按钮,你想执行两个 onClick 事件, 只需单击 1 次即可显示隐藏的文本并隐藏按钮。

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>

如您所见,匿名函数只返回了两个函数。

setButtonShow(a); setShow(b)

【讨论】:

【参考方案5】:

你可以使用嵌套。

有两个函数,一个是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

【讨论】:

【参考方案6】:

您可以简单地将其包裹在[] 中。这也适用于材质 UI 按钮。

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

Click to see sample code

Click to see the output

【讨论】:

【参考方案7】:

最佳方式:

onClick= () =&gt;  f1(); f2(); 

【讨论】:

以上是关于调用多个函数 onClick ReactJS的主要内容,如果未能解决你的问题,请参考以下文章

Javascript 中调参数的脚本onclick="select(this)" this 怎么解释?

js同时(onclick)调用多个方法

button按钮如何在onclick中调用java后台函数

js拼装字符串中调用函数传递多个参数。

按钮使用onclick调用js函数参数传递问题

将 knockoutjs 视图模型传递给多个 ajax 调用