javascript - 表單中輸入框值遠程合法性驗證問題
問題描述
1.問題是這樣的,有一個輸入框,我想在onBlur時機去驗證該值在數(shù)據(jù)庫中是否已經(jīng)存在,就像我們平時注冊郵箱的時候會實時提示該郵箱名稱是否已經(jīng)被使用。之前在jquery時代可以是指ajax請求為同步。但是,在antd+dva框架中請求都是通過dispatch發(fā)起的,在這種情況下該如何實現(xiàn)呢?
問題解答
回答1:你可能還沒有完全搞清楚 Redux 相關(guān)的一些概念。
dispatch 發(fā)起的并不是請求,而是一個更改全局狀態(tài)的 Action。只不過最常見的更改數(shù)據(jù)狀態(tài) Action 的場景是【發(fā)送異步網(wǎng)絡(luò)請求】,這并不代表請求必須 dispatch,也不代表 dispatch 必須在異步場景下使用。
具體到你的這個問題,一個輸入框的狀態(tài)顯然是非常局部的,顯然【在一般情境下】與頁面其它部分的狀態(tài)沒有耦合。那么這時,你完全可以不走 Dva 封裝的 Redux 那一套,而是自己封裝一個基于 fetch / axios / $.ajax 的模塊,專門提供給你這個輸入框組件使用。
最后,同步 Ajax 是糟糕的做法,建議封裝異步請求為 Promise。
回答2:@ewind 的回復正解其實我之前一直疑惑的原因在于不知道antd框架form組件validateFields方法會自動對異步操作進行阻塞,總想著異步驗證沒返回之前表單已提交的。
相關(guān)文章:
1. javascript - 有適合開發(fā)手機端Html5網(wǎng)頁小游戲的前端框架嗎?2. javascript - arguments.callee3. javascript - js setTimeout在雙重for循環(huán)中如何使用?4. java - 線上應(yīng)用,如果數(shù)據(jù)庫操作失敗的話應(yīng)該如何處理?5. atom開始輸入!然后按tab只有空格出現(xiàn)沒有html格式出現(xiàn)6. node.js - 阿里云ECS,阿里云Docker,還有Leancloud的LeanEgine,哪個更適合NodeJs WebApp?7. java - 創(chuàng)建maven項目失敗了 求解決方法8. mac里的docker如何命令行開啟呢?9. mysql - 這種分級一對多,且分級不平衡的模型該怎么設(shè)計表?10. mysql - linux連接數(shù)據(jù)庫報錯
