javascript - 表單中輸入框值遠(yuǎn)程合法性驗(yàn)證問(wèn)題
問(wèn)題描述
1.問(wèn)題是這樣的,有一個(gè)輸入框,我想在onBlur時(shí)機(jī)去驗(yàn)證該值在數(shù)據(jù)庫(kù)中是否已經(jīng)存在,就像我們平時(shí)注冊(cè)郵箱的時(shí)候會(huì)實(shí)時(shí)提示該郵箱名稱是否已經(jīng)被使用。之前在jquery時(shí)代可以是指ajax請(qǐng)求為同步。但是,在antd+dva框架中請(qǐng)求都是通過(guò)dispatch發(fā)起的,在這種情況下該如何實(shí)現(xiàn)呢?
問(wèn)題解答
回答1:你可能還沒(méi)有完全搞清楚 Redux 相關(guān)的一些概念。
dispatch 發(fā)起的并不是請(qǐng)求,而是一個(gè)更改全局狀態(tài)的 Action。只不過(guò)最常見(jiàn)的更改數(shù)據(jù)狀態(tài) Action 的場(chǎng)景是【發(fā)送異步網(wǎng)絡(luò)請(qǐng)求】,這并不代表請(qǐng)求必須 dispatch,也不代表 dispatch 必須在異步場(chǎng)景下使用。
具體到你的這個(gè)問(wèn)題,一個(gè)輸入框的狀態(tài)顯然是非常局部的,顯然【在一般情境下】與頁(yè)面其它部分的狀態(tài)沒(méi)有耦合。那么這時(shí),你完全可以不走 Dva 封裝的 Redux 那一套,而是自己封裝一個(gè)基于 fetch / axios / $.ajax 的模塊,專(zhuān)門(mén)提供給你這個(gè)輸入框組件使用。
最后,同步 Ajax 是糟糕的做法,建議封裝異步請(qǐng)求為 Promise。
回答2:@ewind 的回復(fù)正解其實(shí)我之前一直疑惑的原因在于不知道antd框架form組件validateFields方法會(huì)自動(dòng)對(duì)異步操作進(jìn)行阻塞,總想著異步驗(yàn)證沒(méi)返回之前表單已提交的。
相關(guān)文章:
1. android - 類(lèi)似這樣的recyclerview滑動(dòng)效果2. python - 正則表達(dá)式中,如果匹配到的字符串后一半剛好是下一個(gè)匹配字符串的前一半,怎么實(shí)現(xiàn)?3. docker不顯示端口映射呢?4. node.js - JavaScript的一個(gè)不能理解的地方5. mysql - SQL語(yǔ)句可以提供“查詢表,并至第100條結(jié)果為止”嗎?6. python - xpath提取網(wǎng)頁(yè)路徑?jīng)]問(wèn)題,但是缺失內(nèi)容?7. javascript - js一個(gè)call和apply的問(wèn)題?8. javascript - 給某個(gè)類(lèi)添加一個(gè)偽類(lèi),這個(gè)類(lèi)有click事件,現(xiàn)在我點(diǎn)擊偽類(lèi)也觸發(fā)了click事件9. Eclipse / Java-導(dǎo)入java。(namespace)。*是否有害?10. mysql - 數(shù)據(jù)庫(kù)為什么需要鎖機(jī)制?
