最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊

antd中form源碼分析

2023-03-04 09:34 作者:小老虎Tigger  | 我要投稿

antd中Form底層其實(shí)使用的是rc-field-form, antd3之前使用的是rc-form.通過下面的demo,我們可以看一下form的簡單實(shí)現(xiàn).

下面是一個(gè)簡單例子,可以簡單看一下是如何使用的.


首先, Field組件會(huì)將傳入的子組件克隆一遍,并且加入value, onChange等props,所以我們在輸入或者選擇等操作發(fā)生后,會(huì)觸發(fā)添加的onChange事件,在添加的onChange事件中,最終dispatch觸發(fā)updateValue.

另外,Field組件還會(huì)使用registerField方法將自身push到fieldEntities數(shù)組中,在updateValue時(shí),會(huì)遍歷fieldEntities,調(diào)用其onStoreChange方法.

而在updateValue時(shí),首先根據(jù)傳入的name和value去更新useForm創(chuàng)建的FormStore,然后再去通知observers, watches.具體在notifyObservers方法中,去調(diào)用Field對(duì)象上的onStoreChange.

Field組件中的onStoreChange方法會(huì)處理引發(fā)數(shù)據(jù)變化的各種情況,最終調(diào)用reRender方法.

reRender其實(shí)就是調(diào)用Component組件的forceUpdate方法,引發(fā) React 更新, 因?yàn)閺母潞玫膕tore中拿到新的value,已經(jīng)和preValue不同, 所以界面會(huì)得到更新,輸入值才會(huì)變化.

antd3之前,我們在使用Form的時(shí)候,需要使用Form.create創(chuàng)建一個(gè)高階組件,根據(jù)name在高階組件中創(chuàng)建state,然后onChange后使用setState,因?yàn)槭窃诟唠A組件中使用setState更新數(shù)據(jù),傳入的整個(gè)子組件都會(huì)重新渲染,這也是之前所說的antd Form性能問題的原因.但是這樣也有好處,就是我們不必像antd4中的Form,在處理聯(lián)動(dòng)關(guān)系時(shí),非常簡單,不需要使用dependence,useWatch等手段.

antd4之后,Form改用filed-form,其實(shí)是將真正的渲染放到了Field組件中,避免了antd3的性能問題,但是帶來最大的問題是,從antd3升級(jí)到之后的版本比較麻煩,而且在處理聯(lián)動(dòng)關(guān)系時(shí),因?yàn)椴辉偈钦麄€(gè)Form都更新,而是里面的每個(gè)Field單獨(dú)更細(xì),所以必須使用dependence,useWatch等方法來進(jìn)行處理,增加了許多代碼量.


antd中form源碼分析的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國家法律
漳州市| 唐海县| 台中县| 建水县| 巨鹿县| 德令哈市| 卓尼县| 施秉县| 上饶市| 广饶县| 邢台市| 澄迈县| 资溪县| 明星| 陆丰市| 洞口县| 利辛县| 台南市| 利川市| 河北省| 鹤壁市| 北川| 林芝县| 林甸县| 祥云县| 新丰县| 丰台区| 诏安县| 万年县| 含山县| 大化| 六安市| 长春市| 遂平县| 潼关县| 内丘县| 新营市| 克山县| 大丰市| 垦利县| 额济纳旗|