被 React “玩弄”的 24 小时:为了修一个不存在的 Bug,我给大模型送了顿火锅钱

兄弟们,周末好。今天不聊高深的技术,来聊聊我昨天是怎么彻底破防的。

昨天,我的代码跑得好好的,但我的钱包却遭到了暴击------我的 OpenClaw 助手 (也就是我那尊贵的"吞金兽"),一口气炫了我 33 美金

折算下来,两百多块人民币,一顿丰盛的海底捞就这么长翅膀飞了 💸。

最气人的是,这次大出血不是因为 AI 太笨,而是因为我把 React 的一个"基础坑"给忘得一干二净。

💡 起因:想给大模型搓个"高端皮肤"

最近手痒,想基于 AnythingLLM 的 API 自己手搓一个好看的聊天界面。

一开始挺顺利,OpenClaw 助手三下五除二就帮我把基础功能写好了。但作为一个有追求(其实就是爱折腾)的程序员,我觉得只用原生的 SessionID 太 Low 了。

"既然要做,就得用人家原生的 Thread(独立会话)逻辑来做持久化,这样才显得专业嘛!"

于是,悲剧的齿轮开始转动。

🍱 硬核的"满汉全席"喂饭

由于 AnythingLLM 的文档更新太快,OpenClaw 一开始有点懵,不知道最新的 Thread 接口怎么调。

我当时脑子一热,直接开启了**"手动喂饭"**模式:

先是甩给它整个 API 文档界面的截图; 它说信息不够?行,我直接找到 swagger-ui-init.js 这种核心逻辑代码,全选、复制、粘贴,一股脑全塞进了对话框。

不得不说,OpenClaw 这头"吞金兽"胃口是真的好,消化完几千行代码后秒变架构师,洋洋洒洒就给我甩出了一套基于 Thread 的完美重构方案。

😱 噩梦:灵异 Bug 与疯狂跳动的账单

满怀期待地把代码跑起来后,诡异的事情发生了:

每次我一刷新页面,后台就会莫名其妙地多出"两个"一模一样的独立会话!

"难道是接口调了两次?还是防抖没做好?"

我当时就跟这个 Bug 杠上了。我疯狂截图、复制控制台的报错、反复向 OpenClaw 寻求调试方案。它也跟着我急,不停地让我改逻辑、加防抖锁、检查生命周期......

大家知道,大模型的 API 是按上下文(Context)长度累加计费的。

由于我前面喂了太多长篇大论的代码,对话轮次一多,雪球越滚越大,我敲下的每一次回车,都在疯狂烧钱

我当时修 Bug 修红了眼,完全没注意到后台的账单正在疯狂蹦迪。直到最后,Bug 似乎是被各种复杂的锁给"压"住了,我长舒一口气,顺手点开了 API 账单。

33.25 USD。

那一刻,我的心跳都漏了半拍。

🤡 破案了:React,你玩我呢?

到了第二天,我从"肉疼"中逐渐冷静下来,盯着那坨被改得面目全非的代码,脑子里突然闪过一道闪电。

卧槽!React 严格模式(Strict Mode)!

在开发环境下,React 为了帮你检查副作用有没有清理干净,会故意把 useEffect 执行两次

  1. 第一次挂载 -> 发起 API 请求,创建了第一个会话。
  2. 立刻模拟卸载,再挂载 -> 又发起一次 API 请求,创建了第二个会话。

破案了兄弟们。

这根本不是 API 调用错了,也不是业务逻辑有问题,纯粹是因为我忘了 React 开发环境这个最基础的"双跳"机制!

我居然带着号称最聪明的大模型,跟一个正常的前端框架特性硬刚了几个小时,硬生生砸进去了两百多块钱。

🩸 价值 33 美金的血泪避坑指南

为了不让大家重蹈我的覆辙,今天把这几条用真金白银换来的建议送给大家,建议立刻收藏:

1. 别舍不得开新对话(最重要!) 如果一个 Bug 聊了 10 轮还没修好,赶紧重启新对话!把最精简、排查过后的代码喂给它。不然带着几万 Token 的上下文一直聊,那不是在修 Bug,那是在给服务器厂商送别墅。

2. 防范 React 的"二次暴击" 在处理创建资源(比如发帖子、建会话、发起支付)的副作用 API 时,一定要加个"防重锁"(比如用 useRef),或者在调试这类纯接口逻辑时,暂时把 index.js 里的 <React.StrictMode> 注释掉

3. 一定要设置余额提醒! 别太相信自己沉浸在代码里时的理智。去后台把额度预警打开,到了阈值强制熔断,能保平安。

💬 写在最后

后悔?后悔有用的话,API 平台还能给我退钱吗?

这 33 美金就当是交了保护费,买了个终身难忘的教训:以后在怀疑 AI 变笨、或者业务逻辑出错之前,先低头看看是不是你的前端框架在背后给你使绊子!

不说了,周末去搬砖了,得把这顿火锅钱给赚回来......

互动时间: 兄弟们,你们在开发过程中,还踩过哪些"极其费钱"或者"极其无语"的坑? 欢迎在评论区写出来,让我开心一下,平衡平衡心理!👇

(如果这篇文章帮你避了坑,别忘了点个在看,转发给相亲相爱的程序员群哦~)

相关推荐
米丘2 小时前
了解 Javascript 模块化,更好地掌握 Vite 、Webpack、Rollup 等打包工具
前端
Heo2 小时前
深入 React19 Diff 算法
前端·javascript·面试
滕青山2 小时前
个人所得税计算器 在线工具核心JS实现
前端·javascript·vue.js
小怪点点2 小时前
手写promise
前端·promise
国思RDIF框架2 小时前
RDIFramework.NET Web 敏捷开发框架 V6.3 发布 (.NET8+、Framework 双引擎)
前端
Mintopia2 小时前
如何在有限的时间里,活出几倍的人生
前端
炫饭第一名2 小时前
速通Canvas指北🦮——变形、渐变与阴影篇
前端·javascript·程序员
Neptune12 小时前
让我带你迅速吃透React组件通信:从入门到精通(上篇)
前端·javascript
阿懂在掘金2 小时前
Vue 表单避坑(一):为什么 v-model 绑定对象属性会偷偷修改父组件数据?
前端·vue.js