摘要:如何寫好業務代碼在前端工作中有很多業務性代碼,如果書寫不規范,那么對后期的維護將是非常致命的。代碼配置化在使用編寫代碼的過程中,經常用到這樣的情況,根據情況判斷是否展示對應的組件。
如何寫好業務代碼?
在前端工作中有很多業務性代碼,如果書寫不規范,那么對后期的維護將是非常致命的。
后端數據庫中經常會一個字段具備幾個不同的狀態,比如:
status: 2 // 各個字段對應的含義 0: 出生 1: 兒童 2: 少年 3: 中年 4: 老年
這樣不同的數字代表的含義,需要在前端展示。
需要根據不同的狀態,前端去做不同的處理
方法一(switch)(bad)下面這段代碼就是常見的無限if/else或者switch場景
// 業務代碼 switch (status) { case 0: // do something return "出生"; case 1: // do something return "兒童"; ... ... default: return ""; }
這樣做是不好的,因為如果后端再加了一個字段,比如
5: 已死亡
那么前端需要重新修改switch函數,這樣需要去修改對應的業務函數,無疑破壞了業務代碼的完整性。
方法二(寫成配置文件)(better)// cfg.js export const cfg = new Map([ [0, 出生], [1, 兒童], [2, 少年], ... ... ]); // 業務代碼 cfg.get(status)
但是這樣僅僅是顯示相關的狀態,如果涉及到狀態的判斷,那這樣的處理方式就有些問題了,比如需要根據具體的狀態去做對應的判斷
switch (status) { case 0: // do something return ; ... ... }
像上面的情況,又變成了第一種情況,顯然這種配置化的方式并不能滿足。如果將對應的操作,與配置分割,則代碼更加不易維護。
方法三(升級配置文件,處理代碼集中)(better)將狀態處理集中起來,如果能將狀態展示和對應的狀態封裝起來,那么就會讓后期代碼維護顯得十分集中。
// cfg.js const status = new Map([ [0, 出生], [1, 兒童], [2, 少年], ... ... ]); const checkIsBirth = (status, callback) => { if(status === 0) { callback && callback() } } export default { status, checkIsBirth } // 在具體使用中 import Person from "./cfg.js" const a = 1; Person.status.get(a); Person.checkIsBirth(a, () => { console.log("Person is in Birth state"); })
這樣處理,如果以后status發生變化,只需要修改checkIsBirth中的判斷邏輯就可以,只需要改動一處。
代碼配置化在使用react編寫代碼的過程中,經常用到這樣的情況,根據情況判斷是否展示對應的組件。
方法一(流水線工作)(bad)function Business({status, bug}) { return ({ status === 0 ? ( ); }123) : null } { bug === 1 ? (456) : null }
這樣的寫法如果僅僅只有一個其實還好,如果有很多個,在代碼中會造成代碼非常冗長,使假想一個頁面中如果有很多這樣的,代碼看起來非常ugly。所以建議將代碼分割開來,形成一個個小的組件,將對應的代碼封裝起來,將會使代碼可讀性提高一些。
方法二(組件粒度細化)(better)function Business() { return (); } // One function One({isShow}) { return ( { isShow === true ? ( ); } // Two function Two({isShow}) { return (123) : null }{ isShow === true ? ( ); }456) : null }
如果經常這么寫是不是會覺得很煩,可以將通用的邏輯抽象為通用的組件。
方法三(高階組件)(better)其實可以觀望一下decorator以后的用法,暫時沒有找到使用的切入點。
function IsShowCom(isShow, Wrapped) { if (isShow === true) { return (Wrapped) =>注意??} return () => null; } // 如果你想轉發ref,你得這么做 function IsShowCom(isShow, Wrapped) { if (isShow === true) { return React.forwardRef((props, ref) => { return }); } return () => null; } // import IsShowCom from "./isShowCom"; function Business() { const One = IsShowCom( status === 0, 123); const Two = IsShowCom( bug === 1,456); return (); }
不要在render中使用高階組件,因為高階組件每次返回來的都是新的組件,會使子組件的狀態丟失 。但是在無狀態組件中,這樣使用并沒有什么問題,因為無狀態組件本身就是隨參數的變化而變化的,只是可能會產生性能問題。
總結前端配置化的整體思路:
針對不同值進行不同處理的時候,思考一下,是不是可以將判斷邏輯代碼集中起來。
針對組件的顯示/隱藏,可以將具體的隱藏邏輯封裝為高階組件,便于維護
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/104528.html
摘要:快速摧毀敵軍設施,殺傷有敵軍生力量,最小化己方傷亡。所以前端工程師在修改完樣式以后,需要反復和設計師還原度的問題。前端工程師依照主題包和設計稿進行前端工程開發。前端工程師很開心,因為不用去投入開發組件庫和調整還原度。作者: 暮塵 2019年05月11日在上海舉辦 FDCON 2019。筆者有幸受到邀請,參與這次盛會。這篇文章就是演講內容的文字提煉版。 淺談中臺 在開始正文內容之前,先簡單聊聊...
摘要:文章同步在微店前端工程化起步于一個內部產品,對外我們有一個開源版本。這么長時間過去了,我們在前端工程化方面有了哪些變化遇到了哪些問題用怎樣的方案解決這些問題等等,值得為大家再分享。最終產品以命令行的形式發布。 文章同步在:https://github.com/hoperyy/bl... 微店前端工程化起步于一個內部產品 vbuilder,對外我們有一個開源版本 bio-cli。 去年我...
摘要:我們只需要配置一下就能生成一個頁面,這個如何實現呢我們慢慢道來技術選型框架搭建分析頁面只需一個容器,可以理解為一個,在加載頁面的時候,異步去分布式配置中心或其他獲取頁面配置,頁面配置單純的就是個字符串。 背景現在很多公司主要業務是c端,擁有巨大用戶和流量的同時,b端業務不可或缺,CRM,CMS,運營配置化管理平臺,數據可視化平臺,各種審批平臺。這些系統都有幾個共同的特點:需求多,變化快...
摘要:微內核架構在大型前端系統中的應用只討論架構,不討論框架名詞解釋由一群盡可能將數量最小化的軟件程序組成,他們負責提供實現一個操作系統所需要的各種機制和功能。而微內核架構已經在操作系統和很多的產品的后端服務及前端中經過了很多的實踐。 微內核架構在大型前端系統中的應用 只討論架構,不討論框架 1、名詞解釋 由一群盡可能將數量最小化的軟件程序組成,他們負責提供、實現一個操作系統所需要的各種機制...
閱讀 1985·2021-11-22 14:45
閱讀 2593·2021-10-12 10:11
閱讀 768·2021-09-22 10:02
閱讀 1198·2019-08-30 15:55
閱讀 1142·2019-08-30 15:54
閱讀 3247·2019-08-30 15:54
閱讀 1181·2019-08-29 17:16
閱讀 3080·2019-08-28 17:55