博文

目前显示的是 十二月, 2025的博文

从 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 ~~~