How do you find the source of an infinite re-render?

I have a custom hook that I’m working on to make a fetch request to an api, and it is causing infinite re-renders. I’m struggling a bit to understand how the various parts of my application fit together – in particular, my store (zustand) is using a middleware (immer) for immutable state, and I’m not certain why its drafting system isn’t protecting me from changes in object identity. What tools can I use to try to track down what I’ve gotten wrong? I can’t really leave the web page open very long because I’m making 1000s of requests per minute to the api I’m working against, so the Chrome dev tools are out, and the static analysis tools I set up (typescript and eslint) haven’t identified any errors, like missing a dependency from the useEffect hook dependency array.

beefsquatch,
@beefsquatch@programming.dev avatar

You’re updating state, that your effect hook depends on, within the hook. So every time the state is updated the effect is run, which updates states which runs the effect etc.

You should use something like react query to handle async data

reflectedodds,

I think the only thing that should be in the dependency array of the useEffect is jsonParams.

I’ve only ever used hooks with no dependencies to effectively “run once” so I don’t know how to make them fire conditionally, but you definitely don’t want the state variables in there.

beefsquatch,
@beefsquatch@programming.dev avatar

Sometimes you do want state variables in the dep array. Not super often but it does happen.

And you shouldn’t just always use an empty array. That creates fragile components. Even for effects that you want to just run once. Always follow the eslint rule

  • All
  • Subscribed
  • Moderated
  • Favorites
  • react@programming.dev
  • InstantRegret
  • ngwrru68w68
  • everett
  • mdbf
  • modclub
  • rosin
  • khanakhh
  • DreamBathrooms
  • thenastyranch
  • magazineikmin
  • Youngstown
  • GTA5RPClips
  • slotface
  • kavyap
  • JUstTest
  • ethstaker
  • osvaldo12
  • normalnudes
  • tacticalgear
  • cisconetworking
  • cubers
  • Durango
  • Leos
  • anitta
  • tester
  • megavids
  • provamag3
  • lostlight
  • All magazines