[React] Handle Deep Object Comparison in React's useEffect hook with the useRef Hook
When you smart component need to handle server request, it would be good to make sure it won't send multi same request to the backend. For example a search input component
The way to prevent it is by check whether the search query is the same as previous one. if it is then stop server request
The second argument to React's useEffect
hook is an array of dependencies for your useEffect
callback. When any value in that array changes, the effect callback is re-run. But the variables
object we're passing to that array is created during render, so our effect will be re-run every render even if the shape of the object is the same. So let's solve this by doing our own equality check from within the effect callback and useEffect
hooks..
function Query({query, variables, normalize = data => data, children}) { const client = useContext(GitHub.Context) const [state, setState] = useReducer( (state, newState) => ({...state, ...newState}), { loaded: false, fetching: false, data: null, error: null, }, ) useEffect(() => { if (isEqual(previousInputs.current, [query, variables])) { return } setState({fetching: true}) client .request(query, variables) .then(res => setState({ data: normalize(res), error: null, loaded: true, fetching: false, }), ) .catch(error => setState({ error, data: null, loaded: false, fetching: false, }), ) }) const previousInputs = useRef() useEffect(() => { previousInputs.current = [query, variables] }) return children(state) }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
2019-04-29 [Algorithm] Calculate Pow(x,n) using recursion
2019-04-29 [Vuex] Use Namespaces in Vuex Stores using TypeScript
2019-04-29 [Algorithm] Fibonacci Sequence - Anatomy of recursion and space complexity analysis
2017-04-29 [Node.js] Test Node RESTful API with Mocha and Chai
2016-04-29 [Typescript] Introduction to Generics in Typescript
2015-04-29 [Whole Web, Node.js, PM2] Restarting your node.js app on code change using pm2
2015-04-29 [Whole Web, Node.js PM2] Loggin with PM2