记一次错误使用 useEffect 导致电脑差点“报废”

背景

起因我在开发 A 项目,过程中写了一点代码(未仔细检查),然后就挂着 A 项目去开发 B 项目了。感觉电脑差点报废,原因竟然是....

不对劲

结果这几天我一直发现电脑有点卡,明显感觉不对劲,回忆下这几天不对劲的点:

  1. 周末挂机2天,电脑 CPU 温度变成 100°,我还以为是没关机过,刻意锁屏休眠了一下,不过温度降到 80°还是很高。
  2. 偶尔切换窗口卡顿,编码卡顿
  3. 网络卡顿

就这样持续了 3 天,我都没去管!以为是电脑长时间没关机的原因,周末关机试一下!

按理说不应该,mac 长时间不关键不影响呀,何况我 mac mini 都没电池,怕啥!

排查问题

一、查看电脑进程,发现一个 Google Chorome Helper 占用较高!

二、打开 Chorome > 更多工具 > 任务管理器

cpu 飙升到 155%!

三、发现了目标标签,打开标签,发现有个报错信息一直在轮询报错

四、check A 项目代码!根据报错信息搜索 useEffect 找到了如下罪魁祸首!!!

tsx 复制代码
const Demo = ({ data }) => {
    // 选中的值
    const [selectedKeys, setSelectedKeys] = useState([])
    
    // 选项列表
    const options = data.map(v => ({
      label: v,
      value: v
    }))
    
    // 监听,默认全部选中
    useEffect(() => {
      setSelectedKeys(options.map(v => v.value))
    }, [options])
}

这代码相信大家一看就明白了吧!useEffect 会 setSelectedKeys,然后组件重新渲染, options 就会改变,然后又会触发 useEffect!

解决方法,监听 options 改成props 的 data 就好了。

tsx 复制代码
// 监听,默认全部选中
useEffect(() => {
  setSelectedKeys(options.map(v => v.value))
}, [data])

事后总结

事后想想太可怕了,CPU 一直保持在 100°,然后磁盘读取、操作都变得卡顿。原因竟然是自己的粗心,加上当时 B 项目有点紧急,就没仔细测试和看到标签的报错信息,导致这个标签一直挂着,然后 CPU 就炸了!流汗!发出来供大家娱乐一下(嘲笑)。

大家引以为戒呀!心疼我的电脑 3s!

相关推荐
Aniugel9 分钟前
单点登录(SSO)系统
前端
鹏多多13 分钟前
移动端H5项目,还需要react-fastclick解决300ms点击延迟吗?
前端·javascript·react.js
serioyaoyao14 分钟前
上万级文件一起可视化,怎么办?答案是基于 ParaView 的远程可视化
前端
万少20 分钟前
端云一体 一天开发的元服务-奇趣故事匣经验分享
前端·ai编程·harmonyos
WindrunnerMax22 分钟前
从零实现富文本编辑器#11-Immutable状态维护与增量渲染
前端·架构·前端框架
不想秃头的程序员24 分钟前
Vue3 封装 Axios 实战:从基础到生产级,新手也能秒上手
前端·javascript·面试
数研小生38 分钟前
亚马逊商品列表API详解
前端·数据库·python·pandas
你听得到1139 分钟前
我彻底搞懂了 SSE,原来流式响应效果还能这么玩的?(附 JS/Dart 双端实战)
前端·面试·github
空白诗40 分钟前
React Native 鸿蒙跨平台开发:react-native-svg 矢量图形 - 自定义图标与动画
react native·react.js·harmonyos
不倒翁玩偶40 分钟前
npm : 无法将“npm”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正确,然后再试一次。
前端·npm·node.js