1、ant design pro 網絡請求封裝中的坑
Ant design pro中的網絡請求時封裝了fetch來實現的,pro約定了當狀態碼200~300為網絡請求成功狀態,其余均為失敗狀態。其次,pro對delete方法以及網絡狀態為204時自動做了text()方法,在校驗delete方法時,要注意json.parse()后進行校驗,并且謹慎使用204的網絡狀態。
避免網絡狀態錯誤后,造成js報錯。比如,接口token超時返回401時,這時不會返回response,要避免在直接對resopnse內深層數據的判斷。
2、富文本中的坑(基于quill.js)
在引用富文本后,輸出為html標簽形式的文本,輸出文本的樣式方面,富文本采用的做法是:引入主題css樣式,有class和style共同起作用,這就導致了將輸出的文本直接插入dom容器中,樣式與富文本內不一致的問題,解決方案為:在需要現在富文本內容的外層容器上,手動填加class類名,并且保證富文本文字在css的作用域內。
富文本字數的坑,富文本是dom元素形式,在判斷文字長度上會出現問題,并不能準確無誤的限制文字數量,可以用一些第三方的domToString工具大概計算出文體長度,但是不建議對富文本做字數限制。
定制富文本樣式的坑:富文本組件的內容一般有兩種形式,一種是通過before、after偽類通過css的方式渲染組件上的文字圖案,這種可以通過覆蓋css直接解決。另外一種是寫在模板里的,這種方式的文案無法用常規方式修改,只能通過自定義富文本組件(自己實現),以及修改dom元素的方式。兩種方式均不推薦。
富文本內置組件處理輸入數據的坑:以鏈接組件為例,例如需要對鏈接的輸入做校驗,可以通過繼承富文本組件類,重構create方法實現,create方法必須返回一個dom元素,所以,當輸入不合法是,需要返回一個空dom元素。不可以不返回。
富文本彈出插件布局的坑:富文本彈出插件是以內部dom元素做的絕對定位,當富文本內部出現滾動時,富文本彈出插件的位置會錯亂,解決方案是:讓富文本隨著文字增加,自動加長高度。
3、錯誤提示風格問題導致的坑
提示風格不統一最主要原因是,對于一些非常規表單元素,或者是大表單夾在著的非常規表單元素沒有按照自定義表單元素來處理。在代碼最開始寫的時候,就使用自定義表單控件來構建。
https://ant.design/components/form-cn/#components-form-demo-customized-form-controls
4、字符串為空串的坑
在校驗、提交前,執行trim()操作,但是要避免對null和undefined做trim,所以,需要做trim的字段如果有默認值(初始值)時,要給’’,而不是nulll和undefined。
5、按鈕重復點擊的問題
對于時間較長的操作,直接添加loading效果,對于時間較短且不可以多次點擊的操作,添加debounce節流。
6、對于存在默認值并且可以修改的地方(用戶頭像)自動閃(改變)的問題
監聽獲取的網絡請求,對返回值進行判斷,沒有顯示默認,有顯示網絡數據,獲取數據時,使用loading優化體驗。
7、前端單頁APP樣式沖突
使用cssmodules,避免直接給元素寫class類名,而是通過style.XXX引入,在直接對標簽修改樣式時,外層要包裹類名,避免污染全局。
8、前端單頁APP路由參數改變不會重新走全部生命周期的坑
只有路由參數變化,進行路由push方法時,是不會走組件的生命周期中的方法,對于復用頁面間直接跳轉場景時,是不會刷新頁面的。解決方案有兩種,第一,修改路由地址,復用頁面使用不同地址但是指向同一個組件。第二,使用dva中的subscriptions,監聽路由去觸發action。
9、前端單頁APP數據緩存的問題
在項目開發后期有提到這個需求,但是改動風險大并未做實現,對這個需求,有一個設想的解決方案。保留頁面離開時現場(redux默認已經實現,redux數據默認不會清空),在組件的初始時,判斷路由參數中頁面場景的變量,來決定是否走頁面的初始化還是返回現場。
具體來說,把頁面的數據分為兩類存儲在redux中,一類是決定因素的數據,表格分頁,排序信息。另外一類是頁面數據。當頁面數據回滾時,直接顯示頁面數據,當頁面需要初始化時,修改決定因素數據(第一部分),并獲取到頁面數據用于顯示。當遇到保留決定因素(分頁信息保留),但需要重新獲取頁面數據時,用決定數據去重新獲取頁面數據。
10、螞蟻組件樣式覆蓋的坑
對于常規組件,只要控制好css作用域,在需要覆蓋的class外嵌套一層global選擇器即可,對于一些彈出類的組件,組件dom節點并不在當前的頁面下(通常在body下),這是,需要給組件填在外層樣式類名,并且在全局中添加這個外層樣式類名,并在這個樣式類名下使用global選擇器修改默認樣式。