Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/464.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在React中,如何使用自己的参数调用多个函数?_Javascript_Reactjs_Onclick_React Props - Fatal编程技术网

Javascript 在React中,如何使用自己的参数调用多个函数?

Javascript 在React中,如何使用自己的参数调用多个函数?,javascript,reactjs,onclick,react-props,Javascript,Reactjs,Onclick,React Props,我想通过点击道具调用两个函数。请注意,它们都需要自己的参数。在对堆栈溢出进行了一些搜索后,我找到了以下解决方案: onclick={()=>{ f1(); f2() }} 因此,我按照如下方式实现了我的: onClick={() => {f1(arg); f2.bind(this, arg)}} f2(arg) { // do something with the argument } 但是第二个函数从未被调用。有人能解释一下为什么这不起作用吗?我想这是一个有约束力

我想通过点击道具调用两个函数。请注意,它们都需要自己的参数。在对堆栈溢出进行了一些搜索后,我找到了以下解决方案:

onclick={()=>{ f1(); f2() }}
因此,我按照如下方式实现了我的:

onClick={() => {f1(arg); f2.bind(this, arg)}}
f2(arg)
{
     // do something with the argument 
}
但是第二个函数从未被调用。有人能解释一下为什么这不起作用吗?我想这是一个有约束力的问题

f1位于父零部件中:

f1(arg, event)
{
        event.preventDefault();
        // so on...
}
f2也在父参数中,如下所示:

onClick={() => {f1(arg); f2.bind(this, arg)}}
f2(arg)
{
     // do something with the argument 
}
它们正在传递给子组件

 render()
    {
            const { f2, arg, f1 } = this.props;
    
            return(
                <button onClick={() => {f2(arg); f1.call(this, arg)}}>
)
    }
render()
{
常数{f2,arg,f1}=this.props;
返回(
{f2(arg);f1.调用(this,arg)}>
)
}
试试这种方法

 onClick={(arg)=>{ this.f1(arg); this.f2(this, arg) }}
或者进行如下单独的函数调用

onClick={(arg)=>{ this.f1(arg) }}

f1(values){
this.f2(values);
}

您可以将这两种方法都称为

onClick={() =>{ this.f1(arg);this.f2(arg)}}

因为您没有调用第二个方法,而是使用bind创建它

当您将
()=>{}
与onClik一起使用时,上下文将由维护,之后不需要绑定这两个函数

这样写:

onClick={(e) => {
   this.f1(e, arg1, arg2, arg3);     // use f1, if function is defined outside of class
   this.f2(e, arg2)
}}

f1 (e, arg1, arg2, arg3) {
   e.preventDefault();
   console.log(arg1, arg2, arg3)
}

f2 (e, arg2) {
   e.preventDefault();
   console.log(arg2)
}
检查:
bind()方法创建一个新函数。


有关绑定的更多详细信息,请查看以下答案:


第二个函数不起作用,因为您实际上并没有使用bind调用函数,您只是为将来的函数调用绑定了作用域。如果要调用具有指定范围的函数,请使用callapply

关于他们的更多信息:

编辑

对于您的情况,您可以这样调用第二个函数:

onClick={(e) => {f1(e); f2.call(this, e)}}
链接到沙盒:

不需要绑定这些方法,因为您通常会调用它们:)如果第一个方法是异步的,该怎么办..我希望只有在第一个方法成功完成后才能执行第二个方法第二个函数已获得event属性,因此我需要将其作为参数传递。按照您的建议执行会产生错误:“×TypeError:无法读取未定义”的属性“preventDefault”,这意味着您忘记将事件对象传递给函数,请检查更新的答案。如果您不想在任何函数中使用事件,则不要将其作为参数传递,假设您只想在第二个函数中传递,然后从第一个函数中删除,像这样:
this.f1(arg1,arg2,arg3)并从函数参数中删除。类型错误:\ this2.f1不是function@eren555能否显示完整的代码,其中定义了f1和f2以及使用click处理程序的元素?绑定函数后,我将如何在此处调用该函数?我还需要将参数传递给f2。那么这会像f2.call(this,e,arg)那样实现吗?给出“TypeError:event.preventDefault不是函数”。既然我们已经传递了这个事件,为什么还要传递这个事件呢?实际上,正如@Mayank Shukla所说的,没有必要使用call调用第二个函数(或者可能存在这种需要,这取决于情况)。我已经提供了沙箱,在那里,你所要求的功能发挥了作用。也许你可以编辑你的代码,告诉我们发生了什么事?我的答案已经更新了。你能共享沙箱吗?如果第一个沙箱是异步的呢..我希望只有在第一个沙箱成功完成后才能执行第二个沙箱