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/cn.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灯, 水草

请输入看板名称,例如:e-shopping站内搜寻

TOP