博文

从 prop drilling 的泥潭到请求共享的天堂

图片
亲爱的朋友,你有遇到过这样的场景吗? 1. 希望严格遵循 React 哲学、维护单向数据流,于是状态提升提升再提升,提升到最后发现这个状态值似乎和当下组件没什么逻辑关联,只是它凑巧了,是共用这个状态值的那两个远房孙组件最近的共同父组件; 2. 写出一版提测了,产品经理指着页面说,“还是把这个统计数据移到上面那块展示吧,排版更好看一点,不难吧?”于是吭哧吭哧重写了组件树中所有被牵涉到的组件的 props,加班加点荣获了「效率低下」的美名,代码也被评价为「扩展性太差」; 3. 眼看着层层的 prop drilling 太反人类了,想想干脆祭出 useContext 吧,可转念又觉得大材小用、加剧耦合、倍感不值,只能背地里吐槽产品的设计毫无章法、后端的接口乱组数据,硬着头皮做他们的粘合剂; 4. 下定决心不能再被 best practice 捆绑了,放飞自我,就是天王老子来了也得是在直接使用到数据的组件里调用获取数据的接口,但是后端赶在天王老子之前来了,“你这一个页面里怎么能同时调用两次接口呢?会不会写前端啊?知不知道服务器压力有多大啊?” 前端已死,都去报名学习 AI 吧……呃,不是🚫 经人指点,在项目中封装了一个 Hook -- useSharedRequest,顾名思义,就是方便在多个组件间共享接口请求,但共享的不是接口返回的数据,而是这个请求的 promise。该 Hook 基于 ahooks 库的 useRequest 封装而来,写法完全一致,只需要在配置项中增加一个 shareKey 作为请求的唯一标识,就可以实现: 1. 在直接使用到数据的组件里调用获取数据的接口,保证组件逻辑内敛; 2. 同一页面多个组件调用相同接口时,只发送一次真实的网络请求,减轻后端压力; 3. 改造和维护成本极低,不管是接口替换还是组件层级变化,都不会牵扯到大面积修改。 基础用法如下图所示: 详细来讲, 1. 定义一个请求共享管理器类 RequestShareManager。 2. 在 RequestShareManager 中声明一个 Map<shareKey, Promise> 类型的私有属性 pendingRequests,用于存储正在进行中的请求。 3. 在 RequestShareManager 中实现...

Web 应用 ---> 桌面应用

图片
目标安装机器是储能柜的 EMS 触控一体机,核心需求是:低内存、少空间、高性能。于是选定了 Tauri 框架进行构建。 大致步骤如下: 1. 安装 Rust 及配套工具链(下载速度慢的话可以考虑换国内镜像) 2. 安装 Visual Studio Build Tools(在 Rust 编译时要用到) 3. 安装 tauri-app 依赖 4. 执行 tauri init 命令进行配置初始化 5. 执行 tauri dev 命令启动开发模式 6. 执行 tauri build 命令生成桌面应用安装包 最后,安装包 3.7M,应用程序 7.1M,运行时内存占用 3.6M,基本满足需求😏 除了前两步卡住了一下,其它流程整体上还是 love and peace,但我有种不详的预感:我只在自己 Windows 系统的电脑上跑通了,但是据说真实的安装环境是 Linux 的😥可能后期跨平台构建和样式兼容的工作量要远大于现在吧?

浅试 Three.js 绘制储能柜

图片
话不多说,直接上效果图: 从 0 创建到 1 还是很容易的,从 1 优化到 100 就很耗时了。动画的流畅度,交互的灵敏度,边缘情况的特殊处理,每一步都是个坎儿啊!很遗憾 resize 的部分纠缠了很久也没有处理好,但其余的效果都达到了我的目标值。技能点 + 1 ~~~

部分 AI 热门名词归纳

图片
  偷得浮生半日闲,画了一个思维导图,把一些 AI 相关的热门概念理一理。当然了,AI 的知识浩如烟海,我了解到的也只是沧海一粟,权当一个简陋的备忘录吧!

接口使用情况查询工具

图片
 这周还算清闲,做了一个【接口使用情况】的查询工具,主要是应对后端和测试总时不时来问“这个接口前端用到了吗”“那个接口在哪里调用的啊”……忙到飞起的时候真的会顾不过来😒 页面很简单,列表页主要负责基础查询,可以了解指定接口是否有被前端调用,以及是在哪些系统里被调用的;详情弹窗则负责更进一步的查询,可以详细看到使用该接口的菜单,方便用户前往核查。 后端是用 node 搭建的,对接代码仓库的 API,实时读取前端各项目的源码文件,进而借助正则匹配和 AST 解析来提取接口信息,并查找使用接口的文件,根据文件路径匹配到菜单信息,返回给前端。 实现这个工具主要的难点在于源代码的精准解析,前置的工作很多,几个系统有关接口调用的部分我几乎都重构了一遍,就是为了保证代码格式尽可能的统一;还有的系统因为各种历史原因,存在大量的未使用但也未移除的代码,导致我不得不又写了几个脚本文件,检测未被引用的接口、类型和常量,删除干净以后整个人都神清气爽了。即便如此,解析源代码也需要额外兼容很多的情况,比如微信小程序和 web 项目工程结构的差异、动态路由的拼接、不同后端服务的分辨,以及花了好大力气才排查出来并发读取源文件时可能有丢包的情况(我一直当是自己解析文件的代码哪里写错了😓😓) 总之,这个工具已经运转起来了,满足了同事们简单场景下的查询需求,稍微复杂点的场景肯定还是远远不够用的啦!静待同事的随时召唤🙇

浅试 MCP

图片
  Copilot 非复吴下阿蒙。效果可以说非常惊艳了,大概只用了三个小时的时间,就把流程跑通了。但是 AI 时代,0-1 是最简单的,1 之后的工作可就难讲咯! 附一张概念图,实操一遍后,理解更深刻了:

Creating a Nice Kitty with AI

图片
A cute cartoon cat co-created with GitHub Copilot (Claude 3.7 Sonnet), where I played the role of the human co-pilot😏 Feel free to check out the live demo at https://nice-kitty.vercel.app/ and explore the code at https://github.com/huangyuting-lab/nice-kitty to see how it's implemented. Plus, turns out AI is still only good at creative tasks with high error tolerance. Guess I won't be out of a job just yet!