diff --git a/blog_posts/react-use-effect-primitive-dependencies.md b/blog_posts/react-use-effect-primitive-dependencies.md new file mode 100644 index 000000000..03e1d30ed --- /dev/null +++ b/blog_posts/react-use-effect-primitive-dependencies.md @@ -0,0 +1,53 @@ +--- +title: "Tip: Prefer primitives in useEffect dependencies" +shortTitle: Primitive useEffect dependencies +type: tip +tags: react,hooks,effect,object,comparison +expertise: intermediate +author: chalarangelo +cover: blog_images/automaton.jpg +excerpt: Avoid unnecessary re-runs by using primitive dependencies in your React effect. +firstSeen: 2022-06-12T05:00:00-04:00 +--- + +Conditionally firing an effect is a pretty common requirement when working with React. In most cases, this is as simple as passing a dependency array to `useEffect`. Turns out that, in some cases, this can cause unnecessary performance degradation. + +Such issues arise when entire objects are passed as dependencies when you only need a primitive value. Due to the nature of objects, [being pass-by-reference](/articles/s/javascript-pass-by-reference-or-pass-by-value), comparing the dependencies will always trigger a re-run. This ends up causing effects to run unnecessarily. + +```jsx +const CartItem = ({ item }) => { + useEffect(() => { + console.log(`${item.name} quantity has changed to ${item.quantity}.`); + }, [item]); + + return ( + <> +