前端工作第四年

这是一篇水文,没有干货。

之前写过一年经验前端三年,经历与经验,之所以没有“两年经验”,大概是因为两年的时候没有经验。本文标题没有提到“经验”二字,也是同样原因。

技术相关

状态管理相关疑问

这一年最想提的,就是上半年有个内部系统做重构,采取了一些新写法,不太习惯,为了寻求“最佳实践”,也曾问过群友、查过 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号了,已经比四周年多了一天了,先这样吧……

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值