五月天青色头像情侣网名,国产亚洲av片在线观看18女人,黑人巨茎大战俄罗斯美女,扒下她的小内裤打屁股

歡迎光臨散文網(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)遵守國家法律
乌拉特中旗| 潜山县| 大理市| 闽侯县| 宜兰市| 神池县| 大石桥市| 灌南县| 凤山县| 沛县| 冕宁县| 绥江县| 普格县| 江川县| 三穗县| 河池市| 沧州市| 中西区| 翁源县| 东平县| 饶河县| 霍邱县| 夏津县| 肃宁县| 昌宁县| 武安市| 毕节市| 靖安县| 湖口县| 昌邑市| 芦溪县| 海阳市| 莱芜市| 乌兰县| 驻马店市| 沙湾县| 湖州市| 秦皇岛市| 平乐县| 巴楚县| 海安县|