国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 語(yǔ)言 > JavaScript > 正文

如何用RxJS實(shí)現(xiàn)Redux Form

2024-05-06 15:43:42
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

寫(xiě)在前面的話

看這篇文章之前,你需要掌握的知識(shí):

React RxJS (至少需要知道 Subject 是什么)

背景

form 可以說(shuō)是 web 開(kāi)發(fā)中的最大的難題之一。跟普通的組件相比,form 具有以下幾個(gè)特點(diǎn):

1、更多的用戶交互。
這意味著可能需要大量的自定義組件,比如 DataPicker,Upload,AutoComplete 等等。

3、頻繁的狀態(tài)改變。
每當(dāng)用戶輸入一個(gè)值,都可能會(huì)對(duì)應(yīng)用狀態(tài)造成改變,從而需要更新表單元素或者顯示錯(cuò)誤信息。

3、表單校驗(yàn),也就是對(duì)用戶輸入數(shù)據(jù)的有效性進(jìn)行驗(yàn)證。
表單驗(yàn)證的形式也很多,比如邊輸入邊驗(yàn)證,失去焦點(diǎn)后驗(yàn)證,或者在提交表單之前驗(yàn)證等等。

4、異步網(wǎng)絡(luò)通信。
當(dāng)用戶輸入和異步網(wǎng)絡(luò)通信同時(shí)存在時(shí),需要考慮的東西就更多了。就比如 AutoComplete,需要根據(jù)用戶的輸入去異步獲取相應(yīng)的數(shù)據(jù),如果用戶每輸入一次就發(fā)起一次請(qǐng)求,會(huì)對(duì)資源造成很大浪費(fèi)。因?yàn)槊恳淮屋斎攵际?code>異步獲取數(shù)據(jù)的,那么連續(xù)兩次用戶輸入拿到的數(shù)據(jù)也有可能存在 "后發(fā)先至" 的問(wèn)題。

正因?yàn)橐陨线@些特點(diǎn),使 form 的開(kāi)發(fā)變得困難重重。在接下來(lái)的章節(jié)中,我們會(huì)將 RxJS 和 Form 結(jié)合起來(lái),幫助我們更好的去解決這些問(wèn)題。

HTML Form

在實(shí)現(xiàn)我們自己的 Form 組件之前,讓我們先來(lái)參考一下原生的 HTML Form。

保存表單狀態(tài)

對(duì)于一個(gè) Form 組件來(lái)說(shuō),需要保存所有表單元素的信息(如 value, validity 等),HTML Form 也不例外。

那么,HTML Form 將表單狀態(tài)保存在什么地方?如何才能獲取表單元素信息?

主要有以下幾種方法:

document.forms 會(huì)返回所有 <form> 表單節(jié)點(diǎn)。 HTMLFormElement.elements 返回所有表單元素。 event.target.elements 也能獲取所有表單元素。
document.forms[0].elements[0].value; // 獲取第一個(gè) form 中第一個(gè)表單元素的值const form = document.querySelector("form");form.elements[0].value; form.addEventListener('submit', function(event) { console.log(event.target.elements[0].value);});

Validation

表單校驗(yàn)的類型一般分為兩種:

內(nèi)置表單校驗(yàn)。默認(rèn)會(huì)在提交表單的時(shí)候自動(dòng)觸發(fā)。通過(guò)設(shè)置 novalidate 屬性可以關(guān)閉瀏覽器的自動(dòng)校驗(yàn)。

JavaScript 校驗(yàn)。

<form novalidate> <input name='username' required/> <input name='password' type='password' required minlength="6" maxlength="6"/> <input name='email' type='email'/> <input type='submit' value='submit'/></form>

存在的問(wèn)題

定制化很難。 比如不支持 Inline Validation,只有 submit 時(shí)才能校驗(yàn)表單,且 error message 的樣式不能自定義。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 固镇县| 普安县| 凤山市| 河西区| 梅河口市| 巴彦淖尔市| 南华县| 循化| 沁水县| 确山县| 偃师市| 大方县| 舞阳县| 廉江市| 潢川县| 洛浦县| 梁平县| 沅陵县| 云阳县| 定日县| 海兴县| 淅川县| 纳雍县| 从江县| 南木林县| 灵武市| 丰镇市| 沁源县| 延庆县| 英吉沙县| 镇雄县| 玉门市| 防城港市| 柳河县| 洮南市| 大石桥市| 泰和县| 来凤县| 响水县| 茶陵县| 靖宇县|