2017-04-24 84 views
0

我有一個redux表單,它將在表單提交時調用一個rest API。如果API調用失敗,我想引發一個SubmissionError,以便可以在窗體上顯示錯誤。由於提交錯誤的詳細信息映射到表單上的屬性,我希望這個處理是表單組件的一部分。使用Redux表單如何在成功提交異步表單提交後提供回調以執行?

表單成功提交給API並獲得成功響應後,我希望表單組件調用提供給表單組件的方法(methodA)。

此刻,我可以看到這樣做的唯一方法是:

  • 通行證在了methodA的形式組成的道具。
  • 在窗體部件的調用reduxForm()在配置對象提供一個方法,以onSubmitSuccess(的methodB)
  • 在的methodB從所提供的道具拉了methodA然後調用它

這是最好的方式做我想做的事還是有一個更簡單的方法?

回答

0

在操作創建者(假設你使用反應-形實轉換)

const submit = (url, data) => dispatch => { 
    dispatch({ type: 'submit-start' }); 

    return new Promise((res, rej) => 
    fetch(/*do some stuff*/) 
     .then(res => { 
     if (res.status !== 200) { 
      dispatch({ type: 'submit-err' }) 
      //the object which is rejected here 
      //configures the errors displayed in the form 
      //in best case your server delivers an appropriate 
      //response 
      rej({ _error: 'Validation Failed', age: 'too young' }); 

     } else { 
      dispatch({ type: 'submit-success' }); 
      res(res.json()) 
     } 

     }) 
); 
} 

export { submit }; 

和在組件:如果從動作創建者返回的無極被拒絕

submit (data) { 
    return this.props.submit(<url>, data) 
} 

render() { 
    const { handleSubmit } = this.props; 
    return <form onSubmit={handleSubmit(submit)}>…</form> 
} 

,錯誤消息被展示。

Redux-Thunk返回以dispatch調用的函數的返回值作爲參數,在本例中爲promise。

對於重寫表單提交驗證,提交函數必須返回一個可以解決或拒絕的承諾。

docs

+0

謝謝,這幾乎是我已經做的。我想要做的是將任意回調傳遞給在成功解析獲取承諾後調用的組件。我不能直接鏈接到獲取諾言,因爲我想捕獲其他錯誤,但不是SubmissionErrors,並且解決這個問題很麻煩。 – Dan