如何编写难以维护的React代码?——滥用useEffect
如何编写难以维护的React代码?——滥用useEffect
在许多项目中,我们经常会遇到一些难以维护的React代码。其中一种常见的情况是滥用useEffect钩子,特别是在处理衍生状态时。让我们来看一个例子:
const ComponentA = ({ list }) => { const [filteredList, setFilteredList] = useState(list); const [filter, setFilter] = useState({}); useEffect(() => { setFilteredList(_.filter(list, filter)); }, [filter]); /*...*/ return ( <> {/*...*/} <Filter filter={filter} onChange={setFilter} /> <List data={filteredList} /> {/*...*/} </> ); };
事实上,filteredList 是一个衍生状态,可以通过计算 list 和 filter 得出:list + filter => filteredList
。所以可以优化成这样:
const ComponentB = ({ list }) => { const [filter, setFilter] = useState({}); const filteredList = useMemo(() => _.filter(list, filter), [list, filter]); /*...*/ return ( <> {/*...*/} <Filter filter={filter} onChange={setFilter} /> <List data={filteredList} /> {/*...*/} </> ); };
在改进后的代码中,我们使用了 useMemo 来计算 filteredList,这样可以避免滥用 useState 和 useEffect。通过传入依赖数组 [list, filter],只有在 list 或 filter 发生变化时,才会重新计算 filteredList,从而优化性能。
减少状态的使用可以有助于降低代码的复杂性,减少潜在的错误。使用 useMemo 可以将计算逻辑从渲染过程中抽离出来,使代码更易于维护和理解。Less States, Less Bugs.
总结:简洁且高效的代码是开发者的追求目标,它不仅有助于减少错误,而且在项目的长期维护中也更容易被团队成员理解与修改。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!