2017-07-15 13 views
0

我正在使用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

您可以存儲在一個下賤的表單中的值,然後從清除最後提交的對象,但在這種情況下,你不會使用提交功能,您必須實現提交的自定義功能。

+0

我還是比較新的React,你能用代碼示例更新你的答案嗎?我認爲我會理解這個概念,但看到它在行動中會非常有幫助!謝謝:) –

0
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變量中設置的,我們允許它通過函數傳遞? –