企业网站托管外包平台,做推广又能做网站,海口网微博,北京最新新闻头条网罗开发#xff08;小红书、快手、视频号同名#xff09;大家好#xff0c;我是 展菲#xff0c;目前在上市企业从事人工智能项目研发管理工作#xff0c;平时热衷于分享各种编程领域的软硬技能知识以及前沿技术#xff0c;包括iOS、前端、Harmony OS、Java、Python等方…网罗开发小红书、快手、视频号同名大家好我是展菲目前在上市企业从事人工智能项目研发管理工作平时热衷于分享各种编程领域的软硬技能知识以及前沿技术包括iOS、前端、Harmony OS、Java、Python等方向。在移动端开发、鸿蒙开发、物联网、嵌入式、云原生、开源等领域有深厚造诣。图书作者《ESP32-C3 物联网工程开发实战》图书作者《SwiftUI 入门进阶与实战》超级个体COC上海社区主理人特约讲师大学讲师谷歌亚马逊分享嘉宾科技博主华为HDE/HDG我的博客内容涵盖广泛主要分享技术教程、Bug解决方案、开发工具使用、前沿科技资讯、产品评测与使用体验。我特别关注云服务产品评测、AI 产品对比、开发板性能测试以及技术报告同时也会提供产品优缺点分析、横向对比并分享技术沙龙与行业大会的参会体验。我的目标是为读者提供有深度、有实用价值的技术洞察与分析。展菲您的前沿技术领航员 大家好我是展菲 全网搜索“展菲”即可纵览我在各大平台的知识足迹。 公众号“Swift社区”每周定时推送干货满满的技术长文从新兴框架的剖析到运维实战的复盘助您技术进阶之路畅通无阻。 微信端添加好友“fzhanfei”与我直接交流不管是项目瓶颈的求助还是行业趋势的探讨随时畅所欲言。 最新动态2025 年 3 月 17 日快来加入技术社区一起挖掘技术的无限潜能携手迈向数字化新征程文章目录前言useEffect 的本质是什么useEffect 滥用的典型场景1. 用 useEffect 做派生状态2. useEffect 控制渲染逻辑3. 复杂组件里写“多条 effect”为什么大部分 useEffect 可以删掉原因 1effect 被用作“状态计算”原因 2effect 被用作“条件渲染”原因 3effect 被用作“组合逻辑”判断一个 useEffect 是否必须真实案例拆解原始写法滥用示例优化 useEffect 的策略策略 1计算 vs 副作用分离策略 2把副作用下沉到自定义 Hook策略 3effect 只做三件事总结前言如果你写过 React 或 React Native一定有这种感受页面里 useEffect 太多刷新一次就好像在跑马拉松eslint 一堆依赖提示你直接关掉就完事改个状态结果一串 effect 被触发页面像爆炸一样那么问题来了大部分 useEffect真的用对了吗没错——在真实项目里我发现90% 的 useEffect 都可以删掉。今天就来聊聊为什么删掉后还能让项目更稳、更易维护。useEffect 的本质是什么一句话总结useEffect 当某些值变化时要执行一件副作用操作。副作用side effect指的是网络请求订阅 / 监听与外部系统交互例如导航、Alert、定时器注意计算、派生状态、渲染逻辑都不算副作用。useEffect 滥用的典型场景1. 用 useEffect 做派生状态const[total,setTotal]useState(0)useEffect((){setTotal(price*count)},[price,count])问题total 可以直接计算不需要放 stateuseEffect 成了“状态中转站”增加维护成本改进consttotalprice*count2. useEffect 控制渲染逻辑useEffect((){if(user)setShow(true)},[user])其实完全可以constshow!!usereffect 没有副作用只是为了“转换数据”完全可以删掉。3. 复杂组件里写“多条 effect”useEffect((){fetchA()},[a])useEffect((){fetchB()},[b])useEffect((){doC()},[c])问题逻辑分散难调试很多 effect 可以合并或者直接放到 hook 里处理page 层成为副作用的集合体为什么大部分 useEffect 可以删掉总结下来有三个核心原因原因 1effect 被用作“状态计算”很多人写useEffect((){setFiltered(list.filter(itemitem.active))},[list])本质上这是计算不是副作用可以直接用constfilteredlist.filter(itemitem.active)原因 2effect 被用作“条件渲染”useEffect((){setVisible(flag)},[flag])这根本不需要 effect直接constvisibleflag原因 3effect 被用作“组合逻辑”useEffect((){if(ab)doSomething()},[a,b])可以考虑把逻辑下沉到 hook或者用 useMemo / useCallback 组合判断一个 useEffect 是否必须问自己三个问题这个 effect 有副作用吗它在做计算还是同步状态吗它会和外部系统交互吗如果答案都是否定的删掉它改用计算或 memo 化。真实案例拆解原始写法const[loading,setLoading]useState(false)const[list,setList]useState([])useEffect((){setLoading(true)fetchData(params).then(res{setList(res)setLoading(false)})},[params])这里的 useEffect 是必须的因为 fetchData 属于副作用。滥用示例const[visible,setVisible]useState(false)useEffect((){setVisible(user!null)},[user])可以改成constvisibleuser!null效果一样但删掉一个 effect页面更轻量。优化 useEffect 的策略策略 1计算 vs 副作用分离所有派生状态、计算尽量用变量或 useMemo策略 2把副作用下沉到自定义 Hookfetch / subscribe / navigation 都写在 hook 里页面只组装不写 effect策略 3effect 只做三件事网络请求外部系统交互订阅 / 监听其他一律不要。总结90% 的 useEffect 可以删掉因为它们承担了不该它承担的逻辑effect 是副作用不是状态计算工具副作用要集中、可预测、可组合乱写只会让项目失控当你开始用“副作用视角”审查 useEffect你会发现页面逻辑更清晰eslint 不再可怕性能更稳bug 更少