Yes, useEffect runs on every render, including the first. If you only want to do something when firstVariable is defined, then an if check inside of useEffect seems fine to me. There may be other patterns or solutions but it's hard to tell without more context. Maybe if you could explain in more detail what firstVariable and secondVariable are I may be able to provide more help.
Sorry if I repeat; you say even I pass the second argument e.g. [firstVariable] to the useEffect it will still run in the first render eventhough firstVariable did not change.
Additional question:
if firstVariable is not same across a rerender but did not cause the rerender, e.g. it is not the cause of rerender since it is not even in the jsx, then the effect will not run. Is that correct?
Yes, it will run on the first render. It seems a bit odd, but that is how it works. useEffect has to have an initial check, otherwise, how would it know if the variable changed or not?
To your second question, the effect will run, regardless if it was the cause of the rerender. useEffect checks on every render, regardless of the cause.
So an effect runs after everyrender if its dependencies requires so, ie. changed.
I sometimes think guides and docs should be a bit succinct. It is difficult to remember, spot,and find a valueable info in a corner of 5 mins read page.
A gotcha about dependency change is whereas the primitives are regarded not changed after set to same value the arrays and objects are regarded as changed after set to same value, naturally.
Also
For further actions, you may consider blocking this person and/or reporting abuse
We're a place where coders share, stay up-to-date and grow their careers.
Also, is an effect run after first render even it has a second argument, ie. dependencies array?
I ask this because if it does then if the
firstVariable
is not set yet then it will throw an error.Yes, useEffect runs on every render, including the first. If you only want to do something when
firstVariable
is defined, then anif
check inside ofuseEffect
seems fine to me. There may be other patterns or solutions but it's hard to tell without more context. Maybe if you could explain in more detail whatfirstVariable
andsecondVariable
are I may be able to provide more help.Sorry if I repeat; you say even I pass the second argument e.g.
[firstVariable]
to theuseEffect
it will still run in the first render eventhoughfirstVariable
did not change.Additional question:
firstVariable
is not same across a rerender but did not cause the rerender, e.g. it is not the cause of rerender since it is not even in the jsx, then the effect will not run. Is that correct?Yes, it will run on the first render. It seems a bit odd, but that is how it works. useEffect has to have an initial check, otherwise, how would it know if the variable changed or not?
To your second question, the effect will run, regardless if it was the cause of the rerender. useEffect checks on every render, regardless of the cause.
So an effect runs after every render if its dependencies requires so, ie. changed.
I sometimes think guides and docs should be a bit succinct. It is difficult to remember, spot,and find a valueable info in a corner of 5 mins read page.
A gotcha about dependency change is whereas the primitives are regarded not changed after set to same value the arrays and objects are regarded as changed after set to same value, naturally.
Also