在React中,如何使onSubmit执行两个操作?

问题描述:

我正在使用Uniforms为我的项目创建表单提交。我需要将表单提交给我的数据库,同时还要清除表单。我可以让onSubmit做一个或另一个,但似乎我不能拥有这两个。什么是让程序注册两者的最佳途径?这里是我的阵营常量与上<Autoform/>标签onSubmit行动:在React中,如何使onSubmit执行两个操作?

const UniformsHello =() => { 

    let formRef; 

    return(
    <div> 
     <h1>Submit a track</h1> 
     <AutoForm 
     ref={ref => formRef = ref} 
     schema={PostSchema} 
     onSubmit={((doc => Submissions.insert(doc)) & (() => formRef.reset()))} 
     placeholder={true}> 

      <AutoField name="Song name" /> 
      <AutoField name="Album title" /> 
      <AutoField name="Soundcloud URL" /> 
      <LongTextField name="Story" /> 

      <div className="super-special-class"> 
       <SubmitField className="super-special-class-with-suffix" /> 
      </div> 
     </AutoForm> 
    </div> 
); 

} 

export default UniformsHello; 

您可以存储在一个下贱的表单中的值,然后从清除最后提交的对象,但在这种情况下,你不会使用提交功能,您必须实现提交的自定义功能。

+0

我还是比较新的React,你能用代码示例更新你的答案吗?我认为我会理解这个概念,但看到它在行动中会非常有帮助!谢谢:) –

const UniformsHello =() => { 

    let formRef; 

    return(

    function handleSubmission(doc,formRef){ 
     Submissions.insert(doc); 
    formRef.reset(); 
    } 

    <div> 
     <h1>Submit a track</h1> 
     <AutoForm 
     ref={ref => formRef = ref} 
     schema={PostSchema} 
     onSubmit={handleSubmission(doc,formRef)} 
     placeholder={true}> 

      <AutoField name="Song name" /> 
      <AutoField name="Album title" /> 
      <AutoField name="Soundcloud URL" /> 
      <LongTextField name="Story" /> 

      <div className="super-special-class"> 
       <SubmitField className="super-special-class-with-suffix" /> 
      </div> 
     </AutoForm> 
    </div> 
); 

} 

export default UniformsHello; 
+0

确定不得不改变你的一点点,但明白了!所以我不明白为什么,但我不得不在'onSubmit'函数中使用'doc =>'函数(任何你可以解释的方法?),然后我必须将函数移动到返回值上方并在' formRef'定义。一旦代码正确,我会将答案标记为正确 –

+0

通常你不能在一个箭头函数内运行两个函数调用。因此,最好有一个单独的函数,它有多个调用来执行。 – codegeek

+0

我想我只是对为什么需要'doc => handleSubmission(doc)'的箭头函数感到困惑,而不是简单地把你的东西放在第一位。所以我猜这些信息是在doc变量中设置的,我们允许它通过函数传递? –