javascript - 表單中輸入框值遠(yuǎn)程合法性驗(yàn)證問題
問題描述
1.問題是這樣的,有一個(gè)輸入框,我想在onBlur時(shí)機(jī)去驗(yàn)證該值在數(shù)據(jù)庫中是否已經(jīng)存在,就像我們平時(shí)注冊郵箱的時(shí)候會實(shí)時(shí)提示該郵箱名稱是否已經(jīng)被使用。之前在jquery時(shí)代可以是指ajax請求為同步。但是,在antd+dva框架中請求都是通過dispatch發(fā)起的,在這種情況下該如何實(shí)現(xiàn)呢?
問題解答
回答1:你可能還沒有完全搞清楚 Redux 相關(guān)的一些概念。
dispatch 發(fā)起的并不是請求,而是一個(gè)更改全局狀態(tài)的 Action。只不過最常見的更改數(shù)據(jù)狀態(tài) Action 的場景是【發(fā)送異步網(wǎng)絡(luò)請求】,這并不代表請求必須 dispatch,也不代表 dispatch 必須在異步場景下使用。
具體到你的這個(gè)問題,一個(gè)輸入框的狀態(tài)顯然是非常局部的,顯然【在一般情境下】與頁面其它部分的狀態(tài)沒有耦合。那么這時(shí),你完全可以不走 Dva 封裝的 Redux 那一套,而是自己封裝一個(gè)基于 fetch / axios / $.ajax 的模塊,專門提供給你這個(gè)輸入框組件使用。
最后,同步 Ajax 是糟糕的做法,建議封裝異步請求為 Promise。
回答2:@ewind 的回復(fù)正解其實(shí)我之前一直疑惑的原因在于不知道antd框架form組件validateFields方法會自動對異步操作進(jìn)行阻塞,總想著異步驗(yàn)證沒返回之前表單已提交的。
相關(guān)文章:
1. Docker for Mac 創(chuàng)建的dnsmasq容器連不上/不工作的問題2. docker安裝后出現(xiàn)Cannot connect to the Docker daemon.3. 關(guān)于Android權(quán)限的獲取問題,大家遇到過這樣的情況嘛?4. PC 手機(jī)兼容的 編輯器5. javascript - 請教空白文本節(jié)點(diǎn)的問題6. javascript - 編程,算法的問題7. javascript - 怎么看網(wǎng)站用了什么技術(shù)框架?8. javascript - 前端開發(fā) 本地靜態(tài)文件頻繁修改,預(yù)覽時(shí)的緩存怎么解決?9. 刷新頁面出現(xiàn)彈框10. css - 關(guān)于border-image
