重构一个 Class 上传组件封装 / 奇趣框架 Reset 持续

今天的工作任务主要有一个值得记录下的,就是重构了一个图片上传组件,因为 Antd 3 表单不支持传 FC 组件(写完之后出现报错)于是就只能用 Class 写了。

这个 Class 图片上传组件的特性是传入一个 URL 数组,输出一个 URL 数组,完美解决前任的旧组件不支持多张图片,以及状态管理混乱的问题(他原先页面 State 和表单 State 混用,组件更新后还通过 Ref 更新页面状态,各种蜜汁操作)而我需要 Redux 操作修改表单内容时,就不能用页面或者表单的 State 了,否则表单填写内容会因为 Redux 数据更新,出现丢失的情况。

晚上饭后陪老妈去购物中心买了两件保暖物品,以及一些方便面,方便后面几天坐车回家的路上吃。我外婆嫌老家很冷,想要和我一样的抱枕抱着睡,但又不能像我这个这么大(等身的)。我妈最终在超市导购下买了一个普通枕头,但特别柔软,确实可以当个抱枕来用。

回到家之后,我也就花了一个多小时的时间继续整理了下奇趣框架的新 Reset 基础样式。把一些常用的 HTML 代码放在了 Demo 上,并且单独的对他们进行调校一些细节,具体的就不说太多,后面会在新的奇趣框架里放出来的!

框架

解决 acme.sh 证书签发失败 / 新博文

今天发现自己首页的 SSL 证书无法更新,晚上打开小窝准备写日记的时候过期无法登录了,其实是因为程序目录被我设定在了 /public 下,需要修改 acme.sh 的配置,调整生成临时文件的路径。

cd /root/.acme.sh
vim paul.ren/paul.ren.conf

Le_Webroot='/data/wwwroot/paul.ren/public'

./acme.sh --renew -d paul.ren

调整完目录手动执行签发命令之后,新的 SSL 证书就到手了!以后自动续签应该也不会再次出现这个问题了。

上班过程也是在不断啃着前任的代码,依旧在尝试解决新增表单状态的问题,踩到的两个坑我给整理出了一篇博文《小故事:为什么公司的后台项目需要 TS?》,以两个真实案例来叙述为什么后台项目应该使用 TypeScript,欢迎阅读~

和 @Innei 日常闲聊,他特别想要我的微信小程序源码,于是打算给他弄个私源 Git 仓库。他给我分享了一个开源项目 Gitea,这玩意就和自己搭建一个 GitHub 差不多!可以发 Commit、Release 什么的,比我现在用的那个 Gitbit 强太多辣!看来是时候考虑换个平台了!

详情

有关前端 API 请求器封装的讨论

这个周四,Cocoro 做的稍微顺手了一点(其实是因为没有大量的异步查询了)。毕竟相较以往,没踩过的坑都踩过了不少,再踩到它也就不至于弄湿衣服了!

晚上和 @Innei 开始了一场热闹的讨论,有关于前端 API 请求器的封装。主要原因是我在微信小程序端是没有任何封装的,直接使用 wx.request 搞的,U1S1,确实有点傻。而他想打造一个通用方案,能跑在 NodeJS / 浏览器 甚至小程序上。

其中他就和我抱怨说 URLSearchParams 这个 API 不能在小程序环境上执行,很 🐶 币,感觉他恨不得弄出一套好用的库来用。相反我却是非常佛性,因为我接触过的项目,就使用过不同类型不同级别的封装程度,就压根没有一个统一的标准。

关于这个问题,我甚至还推理出了一套优劣,接下来也会弄成一篇文章发布,敬请期待吧!

他还给我看了一个大量 TS 重载的代码,我执意的说我现在写过的代码就没有什么场景用到它。然后他分享给我了一个很好的使用情形,根据不同 type 传入函数(文章/说说),返回不同 TS 类型定义的内容(文章接口包含什么,说说接口包含什么)。

search( type: 'note', keyword: string, options?: Omit<SearchOption, 'rawAlgolia'> ): Promise<RequestProxyResult<PaginateResult<Pick<NoteModel, 'modified' | 'id' | 'title' | 'created' | 'nid' >>>>
search( type: 'post', keyword: string, options?: Omit<SearchOption, 'rawAlgolia'> ): Promise<RequestProxyResult<PaginateResult<Pick<PostModel, 'modified' | 'id' | 'title' | 'created' | 'slug' | 'category' >>>>

我压根没想过这样的封装,现在依旧使用着 TypeScript 最基础的类型检测和异常预判。他这样的场景,我往往会将它们(文章/说说)分离,形成独立的函数进行返回,并分别指定其返回的类型...

Cocoro 噩梦开始的第二天 / 维护小窝

此日记定期展示,已过期失效,点击详情可向站长申请

单身程序员的朴素一天

是一个无所事事的周六,在没有任何人的打扰下,我直接睡到了下午一点五十,醒来之后一碗白粥就是早餐,下午四点半去麦当劳的下午茶为午餐。期间还去附近的超市淘了点零食备用...

和我比较要好的朋友,要么有女朋友,要么为了生活奔波做兼职,要么还在上学住校,能约出来的人实在是太少太少了==

社交软件就算了吧,别人说的观点我还是觉得很正确,正经人都不会玩,玩这些软件的人大多都有目的性,为了聊天而聊天,有什么意义么?一入软件深似水,看似谈到了个“对象”结果反手就被人家扣了手“绿帽子”的例子太多太多,我可不想成为下一个被宰的羔羊==

晚餐依然在晚上八点多吃,不过比平时吃的饭少了一些。饭后去了亲戚家,我这次没有太多的话题,都是他们大人之间的事情。我拿着 13 一直打原神,拉了游戏里此前主动加入认识的那位“荧”朋友,刷着骗骗花活动的成就,打到凌晨十二点还有 50% 多,确实耐用(离家的时候 90% 多吧)

也就是说,今天确实是没写一行代码了,零社交、零代码、零学习。这就是我这种单身程序员的一天了。

原神等级突破原神活动魔化果实抽甘雨

Antd 依赖版本问题 / 学历焦虑

今天基本上就是修新 DA 的 Bug,主要是发现 WebSocket 那边有点问题,期间在服务器重装了依赖,发现某处组件 TS 报错了。

原因是我 package.json 里 Antd 写的是 ^4.16.2,其实是固定在 V4 这个大版本号下的所有版本,于是就被安装成 4.17.1 了。想要固定在 4.16.XX 版本的话,必须写成 ~4.16.2 才可以。4.17.XX 这个大版本主要升级了 rc-cascader 的依赖,因此导致组件方法返回的数据发生改变,要不是有 TS 的类型检查,估计还一时难以发现这个问题。

继续整 Shopify 模板,打算实现一个自选文章展示的模块,选中文章之后提示报错 Setting 'article' must be a valid article handle 信息,改了很久的代码都没有用,具体原因明天再分析和尝试解决。

今日原神进度:

  • 日常委托和刷体力
  • 完成世界任务“远吕羽氏遗事:其三”
  • 完成世界任务“远吕羽氏遗事:其四”

晚上和我一位师弟聊天,一直没看他发过朋友圈也没在群里聊过。原来是人家升学考了本科,现在在读大学。说来也是惭愧,当年我学校也确实有这个机会,但必须学一整年文化课然后去考试,我这毫无自信的语数英,根本就没有太大机会能考上什么好学校,压力很大。于是放弃,后面选择了另外的兼修大专(不去其实也可以,高技和大专属相同待遇)。

他在大学除了有专业的计算机理论课,还学了 Java Web,还是非常与时俱进的。作为后端,Vue 也有试过水,但他并不知道 React。我问他想不想努力去大厂,他表示挺有兴趣。本科确实是大厂的通行证,像我大专基本上都是被筛简历的!哪怕是三本,都还是有机会去一趟大厂实习的 🙄

Shopify / createPortal 实现操作栏组件

今天的任务继续整 Shopify 模板,就整了两个新组件而已,其中第一个需要将产品关联到组件里面去提供选择和自定义选项。

Input (Product) 给 Section 下的 Block 块增加一个选择产品的设置,再根据 Product Object 去获取对象并数据就可以完成了。

拿到数据之后就是样式方面的调整了,这方面是最耗时的,想要有比较合理的最终效果,必须自己写一个 CSS Reset 规则才行。

我采用的是不动主题源文件 + 自定义新样式 + 局部 Reset 主题样式的方式给这个主题增加新的 Section 组件块。这个模板最坑的地方是栅格系统采用 Float 实现,高度调整不灵活,不能像 Flex 那样自动缩放,很傻。而如果直接修改主题内置的样式,就极易造成内置的其他组件效果异常的情况,而这正是二开项目最大的难题。

晚上给小窝增加了置底操作栏,使用 ReactDOM 的 createPortal 方法实现。这个 API 普遍用于“跨出”框架根 DOM 节点,实现通知、弹窗等类型的组件,结合原生 JS 实现一个简单的效果不算太难。

后台快捷栏
1
2
3
...
14
奇趣音乐盒技术源于 Kico Player
Emmm,这里是歌词君