这是一篇水文,没有干货。
之前写过一年经验、前端三年,经历与经验,之所以没有“两年经验”,大概是因为两年的时候没有经验。本文标题没有提到“经验”二字,也是同样原因。
技术相关
状态管理相关疑问
这一年最想提的,就是上半年有个内部系统做重构,采取了一些新写法,不太习惯,为了寻求“最佳实践”,也曾问过群友、查过 github,最终仍无所成,迷茫至今……
新项目采用了 vue3 + pinia + tsx,我看 pinia 文档提到:
一个 Store 应该包含可以在整个应用中访问的数据。这包括在许多地方使用的数据,例如显示在导航栏中的用户信息,以及需要通过页面保存的数据,例如一个非常复杂的多步骤表单。
另一方面,你应该避免在 Store 中引入那些原本可以在组件中保存的本地数据,例如,一个元素在页面中的可见性。
我理解应该就是判断状态是否为多页面共享,以决定是否使用 pinia。但是这个新项目中,凡是后端返回的业务数据都保存在 pinia 中,简单来说就是接口返回的数据都保存。显然,这样会导致页面组件注销后仍然占用着内存。问过同事为什么这样做,回答比较宽泛:组件与数据分离,便于维护,便于单测……
按如上目的,把状态提到全局,类似 hook 的写法也同样有效。我也确实写过这样的代码,结果 code review 又没通过,最后还是改成了pinia,理由就是 hook 文件的 ref 应该在函数内部而非全局。
该问题已困扰我四个月了。期间见过内网中另一位前端大佬写的文章,提到前端数据结构设计,可能二者有一定关联。文中提到,把列表数据转换为按唯一 key 存储的对象数据,比如:
[
{ id: '123', name: 'a', age: 1 },
{ id: '456', name: 'b', age: 2 }
]
要存储为:
{
"123": {
"id": "123",
"name": "a",
"age": 1
},
"456": {
"id": "456",
"name": "b",
"age": 2
}
}
如果列表页可以点击查看详情,那么还可以往这个json中存储其他属性。这样的好处是页面展示的数据来源单一,如果有更新操作也很方便更新。否则如果列表数据和详情分开,得分开更新,可能还会需要列表整个刷新。
显然做这样一层转换是需要代码额外处理的,我也能理解这样做的好处,之前我也想过做类似的转换:
比如一个聊天页面,类似企业微信、新版QQ的样式,左侧是消息会话列表,中间是聊天框,右侧是群成员群介绍等,显然,对于中间和右侧的展示,我们不可避免要取多种类型的数据,这时就需要考虑设计什么结构,比如:
[
// 整个数据也可以是对象形式,把群 id 作为 key
{
"id": "群id1",
"messageList": [],
"groupMembers": [],
"info": {}
},
{
"id": "群id2",
"messageList": [],
"groupMembers": [],
"info": {}
}
]
还是:
{
"messageMap": {
// 也可以是数组形式
"群id1": [],
"群id2": []
},
"groupMembers": {
// 也可以是数组形式
"群id1": [],
"群id2": []
},
"info": {
// 也可以是数组形式
"群id1": {},
"群id2": {}
}
}
不过我当时想的比较简单,虽然我觉得第一种更方便取值,但是项目代码写的是第二种,到最后还是妥协了,“能跑就行”。
不过那篇内网的文章中,提到了“所有权”问题,我觉得这才是核心。文中说:
我们不管在列表页加载到的 user list 中的 user,还是 user detail 中加载到的 user,都应该属于应用,而不是只属于 list 或者 detail 页面。
我对这一点是存疑的。毕竟一直接受的教育就是按组件分、按页面分,兄弟组件有共享部分就提升到父组件,共享文件过多才挪到全局 store。
文中还提到了领域模型啥的,也为此查过一些 DDD 的文章,遗憾暂未掌握。
这就是困扰我数月的问题,至今未解。
技术之外
职业规划
琐事里最想谈的就是这个了,其实也没什么好说的。这一年摇摆不定,想过转行,也做过一些准备与尝试,至今未成。
过年后上班不久,小组换了领导,刚来就叫大家想想自己的长处短处,能为团队提供什么、需要团队提供什么,以及自身定位这些。上班路上想了很多回,几个月过去了,前两天领导终于来问了,最后给的答案还是比较笼统的,没啥长处,短处倒是能说一两个,估计领导不太爱听。
公租房退库补贴
七月初收到南山区退库补贴的短信,纠结了半个月了,最后还是决定退出了。深圳户口对我来说,就是多了几万块钱而已。
要说等吧,也想等的,但是一来人太多了,估计要等十年以上,而且我选了一个容易失业的职业,不知彼时身处何处天涯海角……
有时候还想写点别的的,真到电脑前又不知道该不该写,感觉做技术的还是纯粹一点比较好,更何况本来就是水文,草稿都留到28号了,已经比四周年多了一天了,先这样吧……