1.問題是這樣的,有一個輸入框,我想在onBlur時機去驗證該值在資料庫中是否已經存在,就像我們平時註冊郵箱的時候會即時提示該郵箱名稱是否已經被使用。之前在jquery時代可以是指ajax請求為同步。但是,在antd dva框架中請求都是透過dispatch發起的,在這種情況下該如何實現呢?
你可能還沒有完全搞清楚 Redux 相關的一些概念。
dispatch 發起的不是請求,而是更改全域狀態的 Action。只不過最常見的更改資料狀態 Action 的場景是【發送非同步網路請求】,這並不代表請求必須 dispatch,也不代表 dispatch 必須在非同步場景下使用。
具體到你的這個問題,一個輸入框的狀態顯然是非常局部的,顯然【在一般情境下】與頁面其它部分的狀態沒有耦合。那麼這時,你完全可以不走 Dva 封裝的 Redux 那一套,而是自己封裝一個基於 fetch / axios / $.ajax 的模組,專門提供給你這個輸入框組件使用。
最後,同步 Ajax 是糟糕的做法,建議封裝非同步請求為 Promise。
@ewind 的回復正解其實我之前一直疑惑的原因在於不知道antd框架form組件validateFields方法會自動對非同步操作進行阻塞,總想著異步驗證沒返回之前表單已提交的。
你可能還沒有完全搞清楚 Redux 相關的一些概念。
dispatch 發起的不是請求,而是更改全域狀態的 Action。只不過最常見的更改資料狀態 Action 的場景是【發送非同步網路請求】,這並不代表請求必須 dispatch,也不代表 dispatch 必須在非同步場景下使用。
具體到你的這個問題,一個輸入框的狀態顯然是非常局部的,顯然【在一般情境下】與頁面其它部分的狀態沒有耦合。那麼這時,你完全可以不走 Dva 封裝的 Redux 那一套,而是自己封裝一個基於 fetch / axios / $.ajax 的模組,專門提供給你這個輸入框組件使用。
最後,同步 Ajax 是糟糕的做法,建議封裝非同步請求為 Promise。
@ewind 的回復正解
其實我之前一直疑惑的原因在於不知道antd框架form組件validateFields方法會自動對非同步操作進行阻塞,總想著異步驗證沒返回之前表單已提交的。