Soft_Job 板


LINE

我們就來模擬一下一個電商網站如果用 global.js 這樣的方式去處理 state 可能會發生什麼事情 一開始,你的 global.js 可能會只有一點點資料, 只有一些 configuration 之類的資料,於是他可能只是一個單純的 object 頁面內所需的資料就用單純的 setState 方式去處理, 隨著時間過去,網站越來越大,功能越來越複雜, 你發現從父 componet 用 props 傳遞 state 的方式漸漸行不通,也讓你快起笑了 像是會員的資料,購物車的內容,訂單的狀況等等的, 於是你決定將這些資料提升到 global.js 的層級 一開始,你只是單純的對 global.js 做變更 (ex: global.member = { id: 1, name: nose }) 一開始你覺得一切都很美好,直到有一天你在修 bug 的時候發現 有個工程師為了快速解票,在需要更改 state 的地方都直接蝦七八亂改一通 明明 global 裡面有許多重要的資料,但他卻天真的寫了 global = { member: { id: 1, name: nose } } global 只剩下 member 的資料了,其他重要的資料都給毀了, 於是你決定重新 refactor 把 global.js 改寫成 singleton 的 class, 並寫了 setter 或是對應的 function 來修改 global 裡的 state 更嚴格的要求團隊的成員必須透過這些 function 來修改 state 現在感覺一切更美好了一點 不過隨著時間再次的過去,你發現 global.js 變得越來越肥大 好幾千行的 js 讓你難以維護, 於是你決定再次的 refactor, 將 global.js 裡同類型的 state 拆分出 member, product, shoppingCart 等等的子 js 於是你感覺一次又再次的美好了, 也發現這東西長得越來越像 flux 惹 大 guy 4 醬的感覺吧 Redux 的確是會增加一些複雜度,寫起 code 來可能會讓你覺得麻煩又綁手綁腳的 但當你仔細回頭來看時,或許你也會發現這些麻煩的東西其實是在幫你自己的忙 就像是明明是弱型別的 js , 為何有許多人想硬把他搞成強型別 寫起來更加的麻煩,甚至還要編譯 不過說到底還是要看團隊的組成以及專案的性質 來決定要怎麼樣 maintain 前端 SPA 的 state 然後因為你文章有提到 Container 的部分就特別再多說一下, 拆分出 Presentation component 其實差別蠻大的, 因為如果你的 component 要是牽扯到太多邏輯,做了太多 side effect 的事情 你的 component 就越難 reuse 想當年自己寫 Alt 瞎七八亂寫,想 reuse 個小小的 component 都搞得自己頭很大 估時間時信誓旦旦的跟 PM 說這個就搬前面的東西過來用就好, 結果最後還是決定重寫一個比較快 XDD -- 能讓男人成為男人的,不是武器或女人,也不是魔法,更不是任何力量。 只能由他自己。 恬娜(地海孤雛) --



※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 101.13.192.210
※ 文章網址: https://webptt.com/m.aspx?n=bbs/Soft_Job/M.1535961618.A.787.html
1F:推 OhGNM: 解釋的很生動XD 09/03 16:48
2F:推 akito117: 很有畫面 推XDDD 09/03 16:59
3F:推 MoMoShota: 你是不是幹過一樣的事 XD 09/03 17:13
4F:推 wanlinlin: 推 09/03 17:47
5F:→ MOONY135: 94你 09/03 17:48
6F:→ stkoso: true story 09/03 17:51
7F:推 ripple0129: 果然目前處理的前端專案還太小了,只覺得麻煩 09/03 18:33
8F:→ justben: 5F got you 09/03 19:19
9F:推 keyut2433: 很真實xd 09/03 23:06
10F:→ nosecoolie: 我其實沒實際經歷過, 但我看過類似的 code base XD 09/04 00:27
11F:推 hangigi: 真實XD 路走一走就會發現大家能想出的解法都大同小異 09/04 07:35
12F:推 IamTD: 就是這樣阿 09/04 09:52
13F:推 pim44442000: 朝聖鼻子 09/04 20:39
14F:推 oopsmarcia: 推推原po好帥<3 09/04 20:58
15F:推 emily800326: 朝聖 推 09/04 21:45
16F:推 TristaW: 第一推就給泥了 鼻子哥 09/04 21:53
17F:推 VisualStudio: 推 09/04 23:23
18F:推 bluelink: 朝聖 鼻子哥加油!! 09/05 01:24
19F:推 rice9547: 可不可以不要那麼寫實XDD 09/05 02:42
20F:推 bndan: 雖然不是用這系的 但下半文有遇過..感同身受 XD 09/07 11:51







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:BuyTogether站內搜尋

TOP