<!DOCTYPE html><html lang="en" class="__className_e34cb4"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" href="/_next/static/media/710e6adf42e8fe6f-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="preload" href="/_next/static/media/7b379c56c483b024-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="preload" href="/_next/static/media/7b9ca6a1d31c5662-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="preload" href="/_next/static/media/931105f8d96e7f26-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="preload" href="/_next/static/media/e1c529c04de64b40-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="preload" as="image" href="https://pbs.twimg.com/profile_images/1545194945161707520/rqkwPViA_400x400.jpg"/><link rel="stylesheet" href="/_next/static/css/600c788e3d06327b.css" crossorigin="" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-145366f12a620bdd.js" crossorigin=""/><script src="/_next/static/chunks/fd9d1056-3689cf1ebcd4c6d7.js" async="" crossorigin=""></script><script src="/_next/static/chunks/472-eb9d9744b4649303.js" async="" crossorigin=""></script><script src="/_next/static/chunks/main-app-892c3dff08e9cd4c.js" async="" crossorigin=""></script><script src="/_next/static/chunks/569-308f8b4b8d1fc1b8.js" async=""></script><script src="/_next/static/chunks/app/layout-739f202c358f2e07.js" async=""></script><script src="/_next/static/chunks/app/page-e44c21793f74b73f.js" async=""></script><title>overreacted — A blog by Dan Abramov</title><meta name="description" content="A personal blog by Dan Abramov"/><link rel="alternate" type="application/atom+xml" href="https://overreacted.io/atom.xml"/><link rel="alternate" type="application/rss+xml" href="https://overreacted.io/rss.xml"/><link rel="icon" href="/icon.png?e0852c1e2c7f0e65" type="image/png" sizes="329x329"/><meta name="next-size-adjust"/><script src="/_next/static/chunks/polyfills-c67a75d1b6f99dc8.js" crossorigin="" noModule=""></script></head><body class="mx-auto max-w-2xl bg-[--bg] px-5 py-12 text-[--text]"><header class="mb-14 flex flex-row place-content-between"><a class="__className_b47211 inline-block text-2xl font-black  scale-100 active:scale-100" style="opacity:1;transition:transform 0.2s ease-in-out, opacity 0.2s 0.4s linear" href="/"><span style="--myColor1:var(--text);--myColor2:var(--text);background-image:linear-gradient(45deg, var(--myColor1), var(--myColor2));background-clip:text;-webkit-background-clip:text;color:transparent;transition:--myColor1 0.2s ease-out, --myColor2 0.2s ease-in-out">overreacted</span></a><span class="relative top-[4px] italic">by<!-- --> <a target="_blank" class=" scale-100 active:scale-100" style="opacity:1;transition:transform 0.2s ease-in-out, opacity 0.2s 0.4s linear" href="https://danabra.mov"><img alt="Dan Abramov" src="https://pbs.twimg.com/profile_images/1545194945161707520/rqkwPViA_400x400.jpg" class="relative -top-1 mx-1 inline h-8 w-8 rounded-full"/></a></span></header><main><div class="relative -top-[10px] flex flex-col gap-8"><a class="block py-4 hover:scale-[1.005] scale-100 active:scale-100" style="opacity:1;transition:transform 0.2s ease-in-out, opacity 0.2s 0.4s linear" href="/a-chain-reaction/"><article><h2 class="__className_b47211 text-[28px] font-black text-[--lightLink] dark:text-[--darkLink]" style="--lightLink:lab(62.916 59.272 -1.587);--darkLink:lab(80.992 32.325 -7.103)">A Chain Reaction</h2><p class="text-[13px] text-gray-700 dark:text-gray-300">December 11, 2023</p><p class="mt-1">The limits of my language mean the limits of my world.</p></article></a><a class="block py-4 hover:scale-[1.005] scale-100 active:scale-100" style="opacity:1;transition:transform 0.2s ease-in-out, opacity 0.2s 0.4s linear" href="/npm-audit-broken-by-design/"><article><h2 class="__className_b47211 text-[28px] font-black text-[--lightLink] dark:text-[--darkLink]" style="--lightLink:lab(48.471 50.975 -21.68);--darkLink:lab(79.547 26.36 -21.42)">npm audit: Broken by Design</h2><p class="text-[13px] text-gray-700 dark:text-gray-300">July 7, 2021</p><p class="mt-1">Found 99 vulnerabilities (84 moderately irrelevant, 15 highly irrelevant)</p></article></a><a class="block py-4 hover:scale-[1.005] scale-100 active:scale-100" style="opacity:1;transition:transform 0.2s ease-in-out, opacity 0.2s 0.4s linear" href="/before-you-memo/"><article><h2 class="__className_b47211 text-[28px] font-black text-[--lightLink] dark:text-[--darkLink]" style="--lightLink:lab(46.289 49.722 -24.71);--darkLink:lab(79.329 25.458 -23.58)">Before You memo()</h2><p class="text-[13px] text-gray-700 dark:text-gray-300">February 23, 2021</p><p class="mt-1">Rendering optimizations that come naturally.</p></article></a><a class="block py-4 hover:scale-[1.005] scale-100 active:scale-100" style="opacity:1;transition:transform 0.2s ease-in-out, opacity 0.2s 0.4s linear" href="/the-wet-codebase/"><article><h2 class="__className_b47211 text-[28px] font-black text-[--lightLink] dark:text-[--darkLink]" style="--lightLink:lab(42.625 47.618 -29.81);--darkLink:lab(78.962 23.945 -27.21)">The WET Codebase</h2><p class="text-[13px] text-gray-700 dark:text-gray-300">July 13, 2020</p><p class="mt-1">Come waste your time with me.</p></article></a><a class="block py-4 hover:scale-[1.005] scale-100 active:scale-100" style="opacity:1;transition:transform 0.2s ease-in-out, opacity 0.2s 0.4s linear" href="/goodbye-clean-code/"><article><h2 class="__className_b47211 text-[28px] font-black text-[--lightLink] dark:text-[--darkLink]" style="--lightLink:lab(39.628 45.897 -33.97);--darkLink:lab(78.663 22.707 -30.18)">Goodbye, Clean Code</h2><p class="text-[13px] text-gray-700 dark:text-gray-300">January 11, 2020</p><p class="mt-1">Let clean code guide you. Then let it go.</p></article></a><a class="block py-4 hover:scale-[1.005] scale-100 active:scale-100" style="opacity:1;transition:transform 0.2s ease-in-out, opacity 0.2s 0.4s linear" href="/my-decade-in-review/"><article><h2 class="__className_b47211 text-[28px] font-black text-[--lightLink] dark:text-[--darkLink]" style="--lightLink:lab(39.465 45.803 -34.2);--darkLink:lab(78.647 22.64 -30.34)">My Decade in Review</h2><p class="text-[13px] text-gray-700 dark:text-gray-300">January 1, 2020</p><p class="mt-1">A personal reflection.</p></article></a><a class="block py-4 hover:scale-[1.005] scale-100 active:scale-100" style="opacity:1;transition:transform 0.2s ease-in-out, opacity 0.2s 0.4s linear" href="/what-are-the-react-team-principles/"><article><h2 class="__className_b47211 text-[28px] font-black text-[--lightLink] dark:text-[--darkLink]" style="--lightLink:lab(39.351 45.738 -34.36);--darkLink:lab(78.635 22.593 -30.46)">What Are the React Team Principles?</h2><p class="text-[13px] text-gray-700 dark:text-gray-300">December 25, 2019</p><p class="mt-1">UI Before API.</p></article></a><a class="block py-4 hover:scale-[1.005] scale-100 active:scale-100" style="opacity:1;transition:transform 0.2s ease-in-out, opacity 0.2s 0.4s linear" href="/on-let-vs-const/"><article><h2 class="__className_b47211 text-[28px] font-black text-[--lightLink] dark:text-[--darkLink]" style="--lightLink:lab(39.302 45.71 -34.43);--darkLink:lab(78.63 22.573 -30.5)">On let vs const</h2><p class="text-[13px] text-gray-700 dark:text-gray-300">December 22, 2019</p><p class="mt-1">So which one should I use?</p></article></a><a class="block py-4 hover:scale-[1.005] scale-100 active:scale-100" style="opacity:1;transition:transform 0.2s ease-in-out, opacity 0.2s 0.4s linear" href="/what-is-javascript-made-of/"><article><h2 class="__className_b47211 text-[28px] font-black text-[--lightLink] dark:text-[--darkLink]" style="--lightLink:lab(39.27 45.691 -34.47);--darkLink:lab(78.627 22.559 -30.54)">What Is JavaScript Made Of?</h2><p class="text-[13px] text-gray-700 dark:text-gray-300">December 20, 2019</p><p class="mt-1">Getting a closure on JavaScript.</p></article></a><a class="block py-4 hover:scale-[1.005] scale-100 active:scale-100" style="opacity:1;transition:transform 0.2s ease-in-out, opacity 0.2s 0.4s linear" href="/how-does-the-development-mode-work/"><article><h2 class="__className_b47211 text-[28px] font-black text-[--lightLink] dark:text-[--darkLink]" style="--lightLink:lab(37.022 44.4 -37.6);--darkLink:lab(78.402 21.631 -32.76)">How Does the Development Mode Work?</h2><p class="text-[13px] text-gray-700 dark:text-gray-300">August 4, 2019</p><p class="mt-1">Dead code elimination by convention.</p></article></a><a class="block py-4 hover:scale-[1.005] scale-100 active:scale-100" style="opacity:1;transition:transform 0.2s ease-in-out, opacity 0.2s 0.4s linear" href="/algebraic-effects-for-the-rest-of-us/"><article><h2 class="__className_b47211 text-[28px] font-black text-[--lightLink] dark:text-[--darkLink]" style="--lightLink:lab(36.794 44.269 -37.91);--darkLink:lab(78.379 21.537 -32.99)">Algebraic Effects for the Rest of Us</h2><p class="text-[13px] text-gray-700 dark:text-gray-300">July 21, 2019</p><p class="mt-1">They’re not burritos.</p></article></a><a class="block py-4 hover:scale-[1.005] scale-100 active:scale-100" style="opacity:1;transition:transform 0.2s ease-in-out, opacity 0.2s 0.4s linear" href="/preparing-for-tech-talk-part-3-content/"><article><h2 class="__className_b47211 text-[28px] font-black text-[--lightLink] dark:text-[--darkLink]" style="--lightLink:lab(36.615 44.166 -38.16);--darkLink:lab(78.362 21.463 -33.17)">Preparing for a Tech Talk, Part 3: Content</h2><p class="text-[13px] text-gray-700 dark:text-gray-300">July 10, 2019</p><p class="mt-1">Turning an idea into a talk.</p></article></a><a class="block py-4 hover:scale-[1.005] scale-100 active:scale-100" style="opacity:1;transition:transform 0.2s ease-in-out, opacity 0.2s 0.4s linear" href="/name-it-and-they-will-come/"><article><h2 class="__className_b47211 text-[28px] font-black text-[--lightLink] dark:text-[--darkLink]" style="--lightLink:lab(34.873 43.166 -40.59);--darkLink:lab(78.187 20.743 -34.89)">Name It, and They Will Come</h2><p class="text-[13px] text-gray-700 dark:text-gray-300">March 25, 2019</p><p class="mt-1">A change starts with a story.</p></article></a><a class="block py-4 hover:scale-[1.005] scale-100 active:scale-100" style="opacity:1;transition:transform 0.2s ease-in-out, opacity 0.2s 0.4s linear" href="/writing-resilient-components/"><article><h2 class="__className_b47211 text-[28px] font-black text-[--lightLink] dark:text-[--darkLink]" style="--lightLink:lab(34.726 43.081 -40.79);--darkLink:lab(78.173 20.683 -35.04)">Writing Resilient Components</h2><p class="text-[13px] text-gray-700 dark:text-gray-300">March 16, 2019</p><p class="mt-1">Four principles to set you on the right path.</p></article></a><a class="block py-4 hover:scale-[1.005] scale-100 active:scale-100" style="opacity:1;transition:transform 0.2s ease-in-out, opacity 0.2s 0.4s linear" href="/a-complete-guide-to-useeffect/"><article><h2 class="__className_b47211 text-[28px] font-black text-[--lightLink] dark:text-[--darkLink]" style="--lightLink:lab(34.612 43.016 -40.95);--darkLink:lab(78.161 20.636 -35.15)">A Complete Guide to useEffect</h2><p class="text-[13px] text-gray-700 dark:text-gray-300">March 9, 2019</p><p class="mt-1">Effects are a part of your data flow.</p></article></a><a class="block py-4 hover:scale-[1.005] scale-100 active:scale-100" style="opacity:1;transition:transform 0.2s ease-in-out, opacity 0.2s 0.4s linear" href="/how-are-function-components-different-from-classes/"><article><h2 class="__className_b47211 text-[28px] font-black text-[--lightLink] dark:text-[--darkLink]" style="--lightLink:lab(34.515 42.96 -41.08);--darkLink:lab(78.151 20.595 -35.25)">How Are Function Components Different from Classes?</h2><p class="text-[13px] text-gray-700 dark:text-gray-300">March 3, 2019</p><p class="mt-1">They’re a whole different Pokémon.</p></article></a><a class="block py-4 hover:scale-[1.005] scale-100 active:scale-100" style="opacity:1;transition:transform 0.2s ease-in-out, opacity 0.2s 0.4s linear" href="/coping-with-feedback/"><article><h2 class="__className_b47211 text-[28px] font-black text-[--lightLink] dark:text-[--darkLink]" style="--lightLink:lab(34.498 42.95 -41.11);--darkLink:lab(78.15 20.589 -35.27)">Coping with Feedback</h2><p class="text-[13px] text-gray-700 dark:text-gray-300">March 2, 2019</p><p class="mt-1">Sometimes I can’t fall asleep.</p></article></a><a class="block py-4 hover:scale-[1.005] scale-100 active:scale-100" style="opacity:1;transition:transform 0.2s ease-in-out, opacity 0.2s 0.4s linear" href="/fix-like-no-ones-watching/"><article><h2 class="__className_b47211 text-[28px] font-black text-[--lightLink] dark:text-[--darkLink]" style="--lightLink:lab(34.254 42.81 -41.45);--darkLink:lab(78.125 20.488 -35.51)">Fix Like No One’s Watching</h2><p class="text-[13px] text-gray-700 dark:text-gray-300">February 15, 2019</p><p class="mt-1">The other kind of technical debt.</p></article></a><a class="block py-4 hover:scale-[1.005] scale-100 active:scale-100" style="opacity:1;transition:transform 0.2s ease-in-out, opacity 0.2s 0.4s linear" href="/making-setinterval-declarative-with-react-hooks/"><article><h2 class="__className_b47211 text-[28px] font-black text-[--lightLink] dark:text-[--darkLink]" style="--lightLink:lab(34.075 42.707 -41.7);--darkLink:lab(78.107 20.414 -35.68)">Making setInterval Declarative with React Hooks</h2><p class="text-[13px] text-gray-700 dark:text-gray-300">February 4, 2019</p><p class="mt-1">How I learned to stop worrying and love refs.</p></article></a><a class="block py-4 hover:scale-[1.005] scale-100 active:scale-100" style="opacity:1;transition:transform 0.2s ease-in-out, opacity 0.2s 0.4s linear" href="/react-as-a-ui-runtime/"><article><h2 class="__className_b47211 text-[28px] font-black text-[--lightLink] dark:text-[--darkLink]" style="--lightLink:lab(34.042 42.689 -41.74);--darkLink:lab(78.104 20.4 -35.72)">React as a UI Runtime</h2><p class="text-[13px] text-gray-700 dark:text-gray-300">February 2, 2019</p><p class="mt-1">An in-depth description of the React programming model.</p></article></a><a class="block py-4 hover:scale-[1.005] scale-100 active:scale-100" style="opacity:1;transition:transform 0.2s ease-in-out, opacity 0.2s 0.4s linear" href="/why-isnt-x-a-hook/"><article><h2 class="__className_b47211 text-[28px] font-black text-[--lightLink] dark:text-[--darkLink]" style="--lightLink:lab(33.928 42.623 -41.9);--darkLink:lab(78.093 20.353 -35.83)">Why Isn’t X a Hook?</h2><p class="text-[13px] text-gray-700 dark:text-gray-300">January 26, 2019</p><p class="mt-1">Just because we can, doesn’t mean we should.</p></article></a><a class="block py-4 hover:scale-[1.005] scale-100 active:scale-100" style="opacity:1;transition:transform 0.2s ease-in-out, opacity 0.2s 0.4s linear" href="/the-bug-o-notation/"><article><h2 class="__className_b47211 text-[28px] font-black text-[--lightLink] dark:text-[--darkLink]" style="--lightLink:lab(33.912 42.614 -41.92);--darkLink:lab(78.091 20.347 -35.85)">The “Bug-O” Notation</h2><p class="text-[13px] text-gray-700 dark:text-gray-300">January 25, 2019</p><p class="mt-1">What is the 🐞(n) of your API?</p></article></a><a class="block py-4 hover:scale-[1.005] scale-100 active:scale-100" style="opacity:1;transition:transform 0.2s ease-in-out, opacity 0.2s 0.4s linear" href="/preparing-for-tech-talk-part-2-what-why-and-how/"><article><h2 class="__className_b47211 text-[28px] font-black text-[--lightLink] dark:text-[--darkLink]" style="--lightLink:lab(33.619 42.445 -42.33);--darkLink:lab(78.062 20.226 -36.14)">Preparing for a Tech Talk, Part 2: What, Why, and How</h2><p class="text-[13px] text-gray-700 dark:text-gray-300">January 7, 2019</p><p class="mt-1">We need to go deeper.</p></article></a><a class="block py-4 hover:scale-[1.005] scale-100 active:scale-100" style="opacity:1;transition:transform 0.2s ease-in-out, opacity 0.2s 0.4s linear" href="/the-elements-of-ui-engineering/"><article><h2 class="__className_b47211 text-[28px] font-black text-[--lightLink] dark:text-[--darkLink]" style="--lightLink:lab(33.489 42.371 -42.51);--darkLink:lab(78.049 20.172 -36.27)">The Elements of UI Engineering</h2><p class="text-[13px] text-gray-700 dark:text-gray-300">December 30, 2018</p><p class="mt-1">What makes UI engineering difficult?</p></article></a><a class="block py-4 hover:scale-[1.005] scale-100 active:scale-100" style="opacity:1;transition:transform 0.2s ease-in-out, opacity 0.2s 0.4s linear" href="/things-i-dont-know-as-of-2018/"><article><h2 class="__className_b47211 text-[28px] font-black text-[--lightLink] dark:text-[--darkLink]" style="--lightLink:lab(33.456 42.352 -42.56);--darkLink:lab(78.046 20.158 -36.3)">Things I Don’t Know as of 2018</h2><p class="text-[13px] text-gray-700 dark:text-gray-300">December 28, 2018</p><p class="mt-1">We can admit our knowledge gaps without devaluing our expertise.</p></article></a><a class="block py-4 hover:scale-[1.005] scale-100 active:scale-100" style="opacity:1;transition:transform 0.2s ease-in-out, opacity 0.2s 0.4s linear" href="/preparing-for-tech-talk-part-1-motivation/"><article><h2 class="__className_b47211 text-[28px] font-black text-[--lightLink] dark:text-[--darkLink]" style="--lightLink:lab(33.423 42.333 -42.6);--darkLink:lab(78.042 20.145 -36.33)">Preparing for a Tech Talk, Part 1: Motivation</h2><p class="text-[13px] text-gray-700 dark:text-gray-300">December 26, 2018</p><p class="mt-1">Here’s my recipe for a good talk idea.</p></article></a><a class="block py-4 hover:scale-[1.005] scale-100 active:scale-100" style="opacity:1;transition:transform 0.2s ease-in-out, opacity 0.2s 0.4s linear" href="/why-do-hooks-rely-on-call-order/"><article><h2 class="__className_b47211 text-[28px] font-black text-[--lightLink] dark:text-[--darkLink]" style="--lightLink:lab(33.212 42.212 -42.9);--darkLink:lab(78.021 20.057 -36.54)">Why Do React Hooks Rely on Call Order?</h2><p class="text-[13px] text-gray-700 dark:text-gray-300">December 13, 2018</p><p class="mt-1">Lessons learned from mixins, render props, HOCs, and classes.</p></article></a><a class="block py-4 hover:scale-[1.005] scale-100 active:scale-100" style="opacity:1;transition:transform 0.2s ease-in-out, opacity 0.2s 0.4s linear" href="/optimized-for-change/"><article><h2 class="__className_b47211 text-[28px] font-black text-[--lightLink] dark:text-[--darkLink]" style="--lightLink:lab(33.195 42.202 -42.92);--darkLink:lab(78.02 20.051 -36.56)">Optimized for Change</h2><p class="text-[13px] text-gray-700 dark:text-gray-300">December 12, 2018</p><p class="mt-1">What makes a great API?</p></article></a><a class="block py-4 hover:scale-[1.005] scale-100 active:scale-100" style="opacity:1;transition:transform 0.2s ease-in-out, opacity 0.2s 0.4s linear" href="/how-does-setstate-know-what-to-do/"><article><h2 class="__className_b47211 text-[28px] font-black text-[--lightLink] dark:text-[--darkLink]" style="--lightLink:lab(33.147 42.174 -42.99);--darkLink:lab(78.015 20.031 -36.6)">How Does setState Know What to Do?</h2><p class="text-[13px] text-gray-700 dark:text-gray-300">December 9, 2018</p><p class="mt-1">Dependency injection is nice if you don’t have to think about it.</p></article></a><a class="block py-4 hover:scale-[1.005] scale-100 active:scale-100" style="opacity:1;transition:transform 0.2s ease-in-out, opacity 0.2s 0.4s linear" href="/my-wishlist-for-hot-reloading/"><article><h2 class="__className_b47211 text-[28px] font-black text-[--lightLink] dark:text-[--darkLink]" style="--lightLink:lab(33.13 42.165 -43.01);--darkLink:lab(78.013 20.024 -36.62)">My Wishlist for Hot Reloading</h2><p class="text-[13px] text-gray-700 dark:text-gray-300">December 8, 2018</p><p class="mt-1">I don&#x27;t want a lot for Christmas. There is just one thing I need.</p></article></a><a class="block py-4 hover:scale-[1.005] scale-100 active:scale-100" style="opacity:1;transition:transform 0.2s ease-in-out, opacity 0.2s 0.4s linear" href="/why-do-react-elements-have-typeof-property/"><article><h2 class="__className_b47211 text-[28px] font-black text-[--lightLink] dark:text-[--darkLink]" style="--lightLink:lab(33.049 42.118 -43.12);--darkLink:lab(78.005 19.99 -36.7)">Why Do React Elements Have a $$typeof Property?</h2><p class="text-[13px] text-gray-700 dark:text-gray-300">December 3, 2018</p><p class="mt-1">It has something to do with security.</p></article></a><a class="block py-4 hover:scale-[1.005] scale-100 active:scale-100" style="opacity:1;transition:transform 0.2s ease-in-out, opacity 0.2s 0.4s linear" href="/how-does-react-tell-a-class-from-a-function/"><article><h2 class="__className_b47211 text-[28px] font-black text-[--lightLink] dark:text-[--darkLink]" style="--lightLink:lab(33.033 42.109 -43.14);--darkLink:lab(78.003 19.983 -36.72)">How Does React Tell a Class from a Function?</h2><p class="text-[13px] text-gray-700 dark:text-gray-300">December 2, 2018</p><p class="mt-1">We talk about classes, new, instanceof, prototype chains, and API design.</p></article></a><a class="block py-4 hover:scale-[1.005] scale-100 active:scale-100" style="opacity:1;transition:transform 0.2s ease-in-out, opacity 0.2s 0.4s linear" href="/why-do-we-write-super-props/"><article><h2 class="__className_b47211 text-[28px] font-black text-[--lightLink] dark:text-[--darkLink]" style="--lightLink:lab(33 42.09 -43.19);--darkLink:lab(78 19.97 -36.75)">Why Do We Write super(props)?</h2><p class="text-[13px] text-gray-700 dark:text-gray-300">November 30, 2018</p><p class="mt-1">There’s a twist at the end.</p></article></a></div></main><script src="/_next/static/chunks/webpack-145366f12a620bdd.js" crossorigin="" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0]);self.__next_f.push([2,null])</script><script>self.__next_f.push([1,"1:HL[\"/_next/static/media/710e6adf42e8fe6f-s.p.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n2:HL[\"/_next/static/media/7b379c56c483b024-s.p.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n3:HL[\"/_next/static/media/7b9ca6a1d31c5662-s.p.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n4:HL[\"/_next/static/media/931105f8d96e7f26-s.p.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n5:HL[\"/_next/static/media/e1c529c04de64b40-s.p.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n6:HL[\"/"])</script><script>self.__next_f.push([1,"_next/static/css/600c788e3d06327b.css\",\"style\",{\"crossOrigin\":\"\"}]\n0:\"$L7\"\n"])</script><script>self.__next_f.push([1,"8:I[3728,[],\"\"]\na:I[9928,[],\"\"]\nb:I[4982,[\"569\",\"static/chunks/569-308f8b4b8d1fc1b8.js\",\"185\",\"static/chunks/app/layout-739f202c358f2e07.js\"],\"\"]\nc:I[8256,[\"569\",\"static/chunks/569-308f8b4b8d1fc1b8.js\",\"185\",\"static/chunks/app/layout-739f202c358f2e07.js\"],\"\"]\nd:I[2008,[\"569\",\"static/chunks/569-308f8b4b8d1fc1b8.js\",\"931\",\"static/chunks/app/page-e44c21793f74b73f.js\"],\"\"]\ne:I[6954,[],\"\"]\nf:I[7264,[],\"\"]\n"])</script><script>self.__next_f.push([1,"7:[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/600c788e3d06327b.css\",\"precedence\":\"next\",\"crossOrigin\":\"\"}]],[\"$\",\"$L8\",null,{\"buildId\":\"j7isfrRVkv2eGkUkaPqfQ\",\"assetPrefix\":\"\",\"initialCanonicalUrl\":\"/\",\"initialTree\":[\"\",{\"children\":[\"__PAGE__\",{}]},\"$undefined\",\"$undefined\",true],\"initialHead\":[false,\"$L9\"],\"globalErrorComponent\":\"$a\",\"children\":[null,[\"$\",\"$Lb\",null,{\"children\":[\"$\",\"html\",null,{\"lang\":\"en\",\"className\":\"__className_e34cb4\",\"children\":[\"$\",\"body\",null,{\"className\":\"mx-auto max-w-2xl bg-[--bg] px-5 py-12 text-[--text]\",\"children\":[[\"$\",\"header\",null,{\"className\":\"mb-14 flex flex-row place-content-between\",\"children\":[[\"$\",\"$Lc\",null,{}],[\"$\",\"span\",null,{\"className\":\"relative top-[4px] italic\",\"children\":[\"by\",\" \",[\"$\",\"$Ld\",null,{\"href\":\"https://danabra.mov\",\"target\":\"_blank\",\"children\":[\"$\",\"img\",null,{\"alt\":\"Dan Abramov\",\"src\":\"https://pbs.twimg.com/profile_images/1545194945161707520/rqkwPViA_400x400.jpg\",\"className\":\"relative -top-1 mx-1 inline h-8 w-8 rounded-full\"}]}]]}]]}],[\"$\",\"main\",null,{\"children\":[\"$\",\"$Le\",null,{\"parallelRouterKey\":\"children\",\"segmentPath\":[\"children\"],\"loading\":\"$undefined\",\"loadingStyles\":\"$undefined\",\"loadingScripts\":\"$undefined\",\"hasLoading\":false,\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$Lf\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[\"$\",\"article\",null,{\"className\":\"markdown\",\"children\":[[\"$\",\"h1\",null,{\"className\":\"__className_b47211 text-[40px] font-black leading-[44px] text-[--title]\",\"children\":\"Not found\"}],[\"$\",\"div\",null,{\"className\":\"markdown mt-10\",\"children\":[[\"$\",\"p\",null,{\"children\":\"This page doesn't exist (yet?)\"}],[\"$\",\"p\",null,{\"children\":[\"I recently rewrote the site so maybe something broke. Please\",\" \",[\"$\",\"$Ld\",null,{\"href\":\"https://github.com/gaearon/overreacted.io/issues/796\",\"children\":\"complain here.\"}]]}],[\"$\",\"p\",null,{\"children\":[\"If you're looking for translated posts, they're not on the site anymore but you can find\",\" \",[\"$\",\"$Ld\",null,{\"href\":\"https://github.com/gaearon/overreacted.io/tree/archive/src/pages\",\"children\":\"an archive of them here.\"}]]}],[\"$\",\"p\",null,{\"children\":\"Hope you'll find what you're looking for.\"}]]}]]}],\"notFoundStyles\":[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/f9d4d708579596e8.css\",\"precedence\":\"next\",\"crossOrigin\":\"\"}]],\"childProp\":{\"current\":[\"$L10\",\"$L11\",null],\"segment\":\"__PAGE__\"},\"styles\":null}]}]]}]}]}],null]}]]\n"])</script><script>self.__next_f.push([1,"9:[[\"$\",\"meta\",\"0\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}],[\"$\",\"meta\",\"1\",{\"charSet\":\"utf-8\"}],[\"$\",\"title\",\"2\",{\"children\":\"overreacted — A blog by Dan Abramov\"}],[\"$\",\"meta\",\"3\",{\"name\":\"description\",\"content\":\"A personal blog by Dan Abramov\"}],[\"$\",\"link\",\"4\",{\"rel\":\"alternate\",\"type\":\"application/atom+xml\",\"href\":\"https://overreacted.io/atom.xml\"}],[\"$\",\"link\",\"5\",{\"rel\":\"alternate\",\"type\":\"application/rss+xml\",\"href\":\"https://overreacted.io/rss.xml\"}],[\"$\",\"link\",\"6\",{\"rel\":\"icon\",\"href\":\"/icon.png?e0852c1e2c7f0e65\",\"type\":\"image/png\",\"sizes\":\"329x329\"}],[\"$\",\"meta\",\"7\",{\"name\":\"next-size-adjust\"}]]\n"])</script><script>self.__next_f.push([1,"10:null\n"])</script><script>self.__next_f.push([1,"11:[\"$\",\"div\",null,{\"className\":\"relative -top-[10px] flex flex-col gap-8\",\"children\":[[\"$\",\"$Ld\",\"a-chain-reaction\",{\"className\":\"block py-4 hover:scale-[1.005]\",\"href\":\"/a-chain-reaction/\",\"children\":[\"$\",\"article\",null,{\"children\":[[\"$\",\"h2\",null,{\"className\":\"__className_b47211 text-[28px] font-black text-[--lightLink] dark:text-[--darkLink]\",\"style\":{\"--lightLink\":\"lab(62.916 59.272 -1.587)\",\"--darkLink\":\"lab(80.992 32.325 -7.103)\"},\"children\":\"A Chain Reaction\"}],[\"$\",\"p\",null,{\"className\":\"text-[13px] text-gray-700 dark:text-gray-300\",\"children\":\"December 11, 2023\"}],[\"$\",\"p\",null,{\"className\":\"mt-1\",\"children\":\"The limits of my language mean the limits of my world.\"}]]}]}],[\"$\",\"$Ld\",\"npm-audit-broken-by-design\",{\"className\":\"block py-4 hover:scale-[1.005]\",\"href\":\"/npm-audit-broken-by-design/\",\"children\":[\"$\",\"article\",null,{\"children\":[[\"$\",\"h2\",null,{\"className\":\"__className_b47211 text-[28px] font-black text-[--lightLink] dark:text-[--darkLink]\",\"style\":{\"--lightLink\":\"lab(48.471 50.975 -21.68)\",\"--darkLink\":\"lab(79.547 26.36 -21.42)\"},\"children\":\"npm audit: Broken by Design\"}],[\"$\",\"p\",null,{\"className\":\"text-[13px] text-gray-700 dark:text-gray-300\",\"children\":\"July 7, 2021\"}],[\"$\",\"p\",null,{\"className\":\"mt-1\",\"children\":\"Found 99 vulnerabilities (84 moderately irrelevant, 15 highly irrelevant)\"}]]}]}],[\"$\",\"$Ld\",\"before-you-memo\",{\"className\":\"block py-4 hover:scale-[1.005]\",\"href\":\"/before-you-memo/\",\"children\":[\"$\",\"article\",null,{\"children\":[[\"$\",\"h2\",null,{\"className\":\"__className_b47211 text-[28px] font-black text-[--lightLink] dark:text-[--darkLink]\",\"style\":{\"--lightLink\":\"lab(46.289 49.722 -24.71)\",\"--darkLink\":\"lab(79.329 25.458 -23.58)\"},\"children\":\"Before You memo()\"}],[\"$\",\"p\",null,{\"className\":\"text-[13px] text-gray-700 dark:text-gray-300\",\"children\":\"February 23, 2021\"}],[\"$\",\"p\",null,{\"className\":\"mt-1\",\"children\":\"Rendering optimizations that come naturally.\"}]]}]}],[\"$\",\"$Ld\",\"the-wet-codebase\",{\"className\":\"block py-4 hover:scale-[1.005]\",\"href\":\"/the-wet-codebase/\",\"children\":[\"$\",\"article\",null,{\"children\":[[\"$\",\"h2\",null,{\"className\":\"__className_b47211 text-[28px] font-black text-[--lightLink] dark:text-[--darkLink]\",\"style\":{\"--lightLink\":\"lab(42.625 47.618 -29.81)\",\"--darkLink\":\"lab(78.962 23.945 -27.21)\"},\"children\":\"The WET Codebase\"}],[\"$\",\"p\",null,{\"className\":\"text-[13px] text-gray-700 dark:text-gray-300\",\"children\":\"July 13, 2020\"}],[\"$\",\"p\",null,{\"className\":\"mt-1\",\"children\":\"Come waste your time with me.\"}]]}]}],[\"$\",\"$Ld\",\"goodbye-clean-code\",{\"className\":\"block py-4 hover:scale-[1.005]\",\"href\":\"/goodbye-clean-code/\",\"children\":[\"$\",\"article\",null,{\"children\":[[\"$\",\"h2\",null,{\"className\":\"__className_b47211 text-[28px] font-black text-[--lightLink] dark:text-[--darkLink]\",\"style\":{\"--lightLink\":\"lab(39.628 45.897 -33.97)\",\"--darkLink\":\"lab(78.663 22.707 -30.18)\"},\"children\":\"Goodbye, Clean Code\"}],[\"$\",\"p\",null,{\"className\":\"text-[13px] text-gray-700 dark:text-gray-300\",\"children\":\"January 11, 2020\"}],[\"$\",\"p\",null,{\"className\":\"mt-1\",\"children\":\"Let clean code guide you. Then let it go.\"}]]}]}],[\"$\",\"$Ld\",\"my-decade-in-review\",{\"className\":\"block py-4 hover:scale-[1.005]\",\"href\":\"/my-decade-in-review/\",\"children\":[\"$\",\"article\",null,{\"children\":[[\"$\",\"h2\",null,{\"className\":\"__className_b47211 text-[28px] font-black text-[--lightLink] dark:text-[--darkLink]\",\"style\":{\"--lightLink\":\"lab(39.465 45.803 -34.2)\",\"--darkLink\":\"lab(78.647 22.64 -30.34)\"},\"children\":\"My Decade in Review\"}],[\"$\",\"p\",null,{\"className\":\"text-[13px] text-gray-700 dark:text-gray-300\",\"children\":\"January 1, 2020\"}],[\"$\",\"p\",null,{\"className\":\"mt-1\",\"children\":\"A personal reflection.\"}]]}]}],[\"$\",\"$Ld\",\"what-are-the-react-team-principles\",{\"className\":\"block py-4 hover:scale-[1.005]\",\"href\":\"/what-are-the-react-team-principles/\",\"children\":[\"$\",\"article\",null,{\"children\":[[\"$\",\"h2\",null,{\"className\":\"__className_b47211 text-[28px] font-black text-[--lightLink] dark:text-[--darkLink]\",\"style\":{\"--lightLink\":\"lab(39.351 45.738 -34.36)\",\"--darkLink\":\"lab(78.635 22.593 -30.46)\"},\"children\":\"What Are the React Team Principles?\"}],[\"$\",\"p\",null,{\"className\":\"text-[13px] text-gray-700 dark:text-gray-300\",\"children\":\"December 25, 2019\"}],[\"$\",\"p\",null,{\"className\":\"mt-1\",\"children\":\"UI Before API.\"}]]}]}],[\"$\",\"$Ld\",\"on-let-vs-const\",{\"className\":\"block py-4 hover:scale-[1.005]\",\"href\":\"/on-let-vs-const/\",\"children\":[\"$\",\"article\",null,{\"children\":[[\"$\",\"h2\",null,{\"className\":\"__className_b47211 text-[28px] font-black text-[--lightLink] dark:text-[--darkLink]\",\"style\":{\"--lightLink\":\"lab(39.302 45.71 -34.43)\",\"--darkLink\":\"lab(78.63 22.573 -30.5)\"},\"children\":\"On let vs const\"}],[\"$\",\"p\",null,{\"className\":\"text-[13px] text-gray-700 dark:text-gray-300\",\"children\":\"December 22, 2019\"}],[\"$\",\"p\",null,{\"className\":\"mt-1\",\"children\":\"So which one should I use?\"}]]}]}],[\"$\",\"$Ld\",\"what-is-javascript-made-of\",{\"className\":\"block py-4 hover:scale-[1.005]\",\"href\":\"/what-is-javascript-made-of/\",\"children\":[\"$\",\"article\",null,{\"children\":[[\"$\",\"h2\",null,{\"className\":\"__className_b47211 text-[28px] font-black text-[--lightLink] dark:text-[--darkLink]\",\"style\":{\"--lightLink\":\"lab(39.27 45.691 -34.47)\",\"--darkLink\":\"lab(78.627 22.559 -30.54)\"},\"children\":\"What Is JavaScript Made Of?\"}],[\"$\",\"p\",null,{\"className\":\"text-[13px] text-gray-700 dark:text-gray-300\",\"children\":\"December 20, 2019\"}],[\"$\",\"p\",null,{\"className\":\"mt-1\",\"children\":\"Getting a closure on JavaScript.\"}]]}]}],[\"$\",\"$Ld\",\"how-does-the-development-mode-work\",{\"className\":\"block py-4 hover:scale-[1.005]\",\"href\":\"/how-does-the-development-mode-work/\",\"children\":[\"$\",\"article\",null,{\"children\":[[\"$\",\"h2\",null,{\"className\":\"__className_b47211 text-[28px] font-black text-[--lightLink] dark:text-[--darkLink]\",\"style\":{\"--lightLink\":\"lab(37.022 44.4 -37.6)\",\"--darkLink\":\"lab(78.402 21.631 -32.76)\"},\"children\":\"How Does the Development Mode Work?\"}],[\"$\",\"p\",null,{\"className\":\"text-[13px] text-gray-700 dark:text-gray-300\",\"children\":\"August 4, 2019\"}],[\"$\",\"p\",null,{\"className\":\"mt-1\",\"children\":\"Dead code elimination by convention.\"}]]}]}],[\"$\",\"$Ld\",\"algebraic-effects-for-the-rest-of-us\",{\"className\":\"block py-4 hover:scale-[1.005]\",\"href\":\"/algebraic-effects-for-the-rest-of-us/\",\"children\":[\"$\",\"article\",null,{\"children\":[[\"$\",\"h2\",null,{\"className\":\"__className_b47211 text-[28px] font-black text-[--lightLink] dark:text-[--darkLink]\",\"style\":{\"--lightLink\":\"lab(36.794 44.269 -37.91)\",\"--darkLink\":\"lab(78.379 21.537 -32.99)\"},\"children\":\"Algebraic Effects for the Rest of Us\"}],[\"$\",\"p\",null,{\"className\":\"text-[13px] text-gray-700 dark:text-gray-300\",\"children\":\"July 21, 2019\"}],[\"$\",\"p\",null,{\"className\":\"mt-1\",\"children\":\"They’re not burritos.\"}]]}]}],[\"$\",\"$Ld\",\"preparing-for-tech-talk-part-3-content\",{\"className\":\"block py-4 hover:scale-[1.005]\",\"href\":\"/preparing-for-tech-talk-part-3-content/\",\"children\":[\"$\",\"article\",null,{\"children\":[[\"$\",\"h2\",null,{\"className\":\"__className_b47211 text-[28px] font-black text-[--lightLink] dark:text-[--darkLink]\",\"style\":{\"--lightLink\":\"lab(36.615 44.166 -38.16)\",\"--darkLink\":\"lab(78.362 21.463 -33.17)\"},\"children\":\"Preparing for a Tech Talk, Part 3: Content\"}],[\"$\",\"p\",null,{\"className\":\"text-[13px] text-gray-700 dark:text-gray-300\",\"children\":\"July 10, 2019\"}],[\"$\",\"p\",null,{\"className\":\"mt-1\",\"children\":\"Turning an idea into a talk.\"}]]}]}],[\"$\",\"$Ld\",\"name-it-and-they-will-come\",{\"className\":\"block py-4 hover:scale-[1.005]\",\"href\":\"/name-it-and-they-will-come/\",\"children\":[\"$\",\"article\",null,{\"children\":[[\"$\",\"h2\",null,{\"className\":\"__className_b47211 text-[28px] font-black text-[--lightLink] dark:text-[--darkLink]\",\"style\":{\"--lightLink\":\"lab(34.873 43.166 -40.59)\",\"--darkLink\":\"lab(78.187 20.743 -34.89)\"},\"children\":\"Name It, and They Will Come\"}],[\"$\",\"p\",null,{\"className\":\"text-[13px] text-gray-700 dark:text-gray-300\",\"children\":\"March 25, 2019\"}],[\"$\",\"p\",null,{\"className\":\"mt-1\",\"children\":\"A change starts with a story.\"}]]}]}],[\"$\",\"$Ld\",\"writing-resilient-components\",{\"className\":\"block py-4 hover:scale-[1.005]\",\"href\":\"/writing-resilient-components/\",\"children\":[\"$\",\"article\",null,{\"children\":[[\"$\",\"h2\",null,{\"className\":\"__className_b47211 text-[28px] font-black text-[--lightLink] dark:text-[--darkLink]\",\"style\":{\"--lightLink\":\"lab(34.726 43.081 -40.79)\",\"--darkLink\":\"lab(78.173 20.683 -35.04)\"},\"children\":\"Writing Resilient Components\"}],[\"$\",\"p\",null,{\"className\":\"text-[13px] text-gray-700 dark:text-gray-300\",\"children\":\"March 16, 2019\"}],[\"$\",\"p\",null,{\"className\":\"mt-1\",\"children\":\"Four principles to set you on the right path.\"}]]}]}],[\"$\",\"$Ld\",\"a-complete-guide-to-useeffect\",{\"className\":\"block py-4 hover:scale-[1.005]\",\"href\":\"/a-complete-guide-to-useeffect/\",\"children\":[\"$\",\"article\",null,{\"children\":[[\"$\",\"h2\",null,{\"className\":\"__className_b47211 text-[28px] font-black text-[--lightLink] dark:text-[--darkLink]\",\"style\":{\"--lightLink\":\"lab(34.612 43.016 -40.95)\",\"--darkLink\":\"lab(78.161 20.636 -35.15)\"},\"children\":\"A Complete Guide to useEffect\"}],[\"$\",\"p\",null,{\"className\":\"text-[13px] text-gray-700 dark:text-gray-300\",\"children\":\"March 9, 2019\"}],[\"$\",\"p\",null,{\"className\":\"mt-1\",\"children\":\"Effects are a part of your data flow.\"}]]}]}],[\"$\",\"$Ld\",\"how-are-function-components-different-from-classes\",{\"className\":\"block py-4 hover:scale-[1.005]\",\"href\":\"/how-are-function-components-different-from-classes/\",\"children\":[\"$\",\"article\",null,{\"children\":[[\"$\",\"h2\",null,{\"className\":\"__className_b47211 text-[28px] font-black text-[--lightLink] dark:text-[--darkLink]\",\"style\":{\"--lightLink\":\"lab(34.515 42.96 -41.08)\",\"--darkLink\":\"lab(78.151 20.595 -35.25)\"},\"children\":\"How Are Function Components Different from Classes?\"}],[\"$\",\"p\",null,{\"className\":\"text-[13px] text-gray-700 dark:text-gray-300\",\"children\":\"March 3, 2019\"}],[\"$\",\"p\",null,{\"className\":\"mt-1\",\"children\":\"They’re a whole different Pokémon.\"}]]}]}],[\"$\",\"$Ld\",\"coping-with-feedback\",{\"className\":\"block py-4 hover:scale-[1.005]\",\"href\":\"/coping-with-feedback/\",\"children\":[\"$\",\"article\",null,{\"children\":[[\"$\",\"h2\",null,{\"className\":\"__className_b47211 text-[28px] font-black text-[--lightLink] dark:text-[--darkLink]\",\"style\":{\"--lightLink\":\"lab(34.498 42.95 -41.11)\",\"--darkLink\":\"lab(78.15 20.589 -35.27)\"},\"children\":\"Coping with Feedback\"}],[\"$\",\"p\",null,{\"className\":\"text-[13px] text-gray-700 dark:text-gray-300\",\"children\":\"March 2, 2019\"}],[\"$\",\"p\",null,{\"className\":\"mt-1\",\"children\":\"Sometimes I can’t fall asleep.\"}]]}]}],[\"$\",\"$Ld\",\"fix-like-no-ones-watching\",{\"className\":\"block py-4 hover:scale-[1.005]\",\"href\":\"/fix-like-no-ones-watching/\",\"children\":[\"$\",\"article\",null,{\"children\":[[\"$\",\"h2\",null,{\"className\":\"__className_b47211 text-[28px] font-black text-[--lightLink] dark:text-[--darkLink]\",\"style\":{\"--lightLink\":\"lab(34.254 42.81 -41.45)\",\"--darkLink\":\"lab(78.125 20.488 -35.51)\"},\"children\":\"Fix Like No One’s Watching\"}],[\"$\",\"p\",null,{\"className\":\"text-[13px] text-gray-700 dark:text-gray-300\",\"children\":\"February 15, 2019\"}],[\"$\",\"p\",null,{\"className\":\"mt-1\",\"children\":\"The other kind of technical debt.\"}]]}]}],[\"$\",\"$Ld\",\"making-setinterval-declarative-with-react-hooks\",{\"className\":\"block py-4 hover:scale-[1.005]\",\"href\":\"/making-setinterval-declarative-with-react-hooks/\",\"children\":[\"$\",\"article\",null,{\"children\":[[\"$\",\"h2\",null,{\"className\":\"__className_b47211 text-[28px] font-black text-[--lightLink] dark:text-[--darkLink]\",\"style\":{\"--lightLink\":\"lab(34.075 42.707 -41.7)\",\"--darkLink\":\"lab(78.107 20.414 -35.68)\"},\"children\":\"Making setInterval Declarative with React Hooks\"}],[\"$\",\"p\",null,{\"className\":\"text-[13px] text-gray-700 dark:text-gray-300\",\"children\":\"February 4, 2019\"}],[\"$\",\"p\",null,{\"className\":\"mt-1\",\"children\":\"How I learned to stop worrying and love refs.\"}]]}]}],[\"$\",\"$Ld\",\"react-as-a-ui-runtime\",{\"className\":\"block py-4 hover:scale-[1.005]\",\"href\":\"/react-as-a-ui-runtime/\",\"children\":[\"$\",\"article\",null,{\"children\":[[\"$\",\"h2\",null,{\"className\":\"__className_b47211 text-[28px] font-black text-[--lightLink] dark:text-[--darkLink]\",\"style\":{\"--lightLink\":\"lab(34.042 42.689 -41.74)\",\"--darkLink\":\"lab(78.104 20.4 -35.72)\"},\"children\":\"React as a UI Runtime\"}],[\"$\",\"p\",null,{\"className\":\"text-[13px] text-gray-700 dark:text-gray-300\",\"children\":\"February 2, 2019\"}],[\"$\",\"p\",null,{\"className\":\"mt-1\",\"children\":\"An in-depth description of the React programming model.\"}]]}]}],[\"$\",\"$Ld\",\"why-isnt-x-a-hook\",{\"className\":\"block py-4 hover:scale-[1.005]\",\"href\":\"/why-isnt-x-a-hook/\",\"children\":[\"$\",\"article\",null,{\"children\":[[\"$\",\"h2\",null,{\"className\":\"__className_b47211 text-[28px] font-black text-[--lightLink] dark:text-[--darkLink]\",\"style\":{\"--lightLink\":\"lab(33.928 42.623 -41.9)\",\"--darkLink\":\"lab(78.093 20.353 -35.83)\"},\"children\":\"Why Isn’t X a Hook?\"}],[\"$\",\"p\",null,{\"className\":\"text-[13px] text-gray-700 dark:text-gray-300\",\"children\":\"January 26, 2019\"}],[\"$\",\"p\",null,{\"className\":\"mt-1\",\"children\":\"Just because we can, doesn’t mean we should.\"}]]}]}],[\"$\",\"$Ld\",\"the-bug-o-notation\",{\"className\":\"block py-4 hover:scale-[1.005]\",\"href\":\"/the-bug-o-notation/\",\"children\":[\"$\",\"article\",null,{\"children\":[[\"$\",\"h2\",null,{\"className\":\"__className_b47211 text-[28px] font-black text-[--lightLink] dark:text-[--darkLink]\",\"style\":{\"--lightLink\":\"lab(33.912 42.614 -41.92)\",\"--darkLink\":\"lab(78.091 20.347 -35.85)\"},\"children\":\"The “Bug-O” Notation\"}],[\"$\",\"p\",null,{\"className\":\"text-[13px] text-gray-700 dark:text-gray-300\",\"children\":\"January 25, 2019\"}],[\"$\",\"p\",null,{\"className\":\"mt-1\",\"children\":\"What is the 🐞(n) of your API?\"}]]}]}],[\"$\",\"$Ld\",\"preparing-for-tech-talk-part-2-what-why-and-how\",{\"className\":\"block py-4 hover:scale-[1.005]\",\"href\":\"/preparing-for-tech-talk-part-2-what-why-and-how/\",\"children\":[\"$\",\"article\",null,{\"children\":[[\"$\",\"h2\",null,{\"className\":\"__className_b47211 text-[28px] font-black text-[--lightLink] dark:text-[--darkLink]\",\"style\":{\"--lightLink\":\"lab(33.619 42.445 -42.33)\",\"--darkLink\":\"lab(78.062 20.226 -36.14)\"},\"children\":\"Preparing for a Tech Talk, Part 2: What, Why, and How\"}],[\"$\",\"p\",null,{\"className\":\"text-[13px] text-gray-700 dark:text-gray-300\",\"children\":\"January 7, 2019\"}],[\"$\",\"p\",null,{\"className\":\"mt-1\",\"children\":\"We need to go deeper.\"}]]}]}],[\"$\",\"$Ld\",\"the-elements-of-ui-engineering\",{\"className\":\"block py-4 hover:scale-[1.005]\",\"href\":\"/the-elements-of-ui-engineering/\",\"children\":[\"$\",\"article\",null,{\"children\":[[\"$\",\"h2\",null,{\"className\":\"__className_b47211 text-[28px] font-black text-[--lightLink] dark:text-[--darkLink]\",\"style\":{\"--lightLink\":\"lab(33.489 42.371 -42.51)\",\"--darkLink\":\"lab(78.049 20.172 -36.27)\"},\"children\":\"The Elements of UI Engineering\"}],[\"$\",\"p\",null,{\"className\":\"text-[13px] text-gray-700 dark:text-gray-300\",\"children\":\"December 30, 2018\"}],[\"$\",\"p\",null,{\"className\":\"mt-1\",\"children\":\"What makes UI engineering difficult?\"}]]}]}],[\"$\",\"$Ld\",\"things-i-dont-know-as-of-2018\",{\"className\":\"block py-4 hover:scale-[1.005]\",\"href\":\"/things-i-dont-know-as-of-2018/\",\"children\":[\"$\",\"article\",null,{\"children\":[[\"$\",\"h2\",null,{\"className\":\"__className_b47211 text-[28px] font-black text-[--lightLink] dark:text-[--darkLink]\",\"style\":{\"--lightLink\":\"lab(33.456 42.352 -42.56)\",\"--darkLink\":\"lab(78.046 20.158 -36.3)\"},\"children\":\"Things I Don’t Know as of 2018\"}],[\"$\",\"p\",null,{\"className\":\"text-[13px] text-gray-700 dark:text-gray-300\",\"children\":\"December 28, 2018\"}],[\"$\",\"p\",null,{\"className\":\"mt-1\",\"children\":\"We can admit our knowledge gaps without devaluing our expertise.\"}]]}]}],[\"$\",\"$Ld\",\"preparing-for-tech-talk-part-1-motivation\",{\"className\":\"block py-4 hover:scale-[1.005]\",\"href\":\"/preparing-for-tech-talk-part-1-motivation/\",\"children\":[\"$\",\"article\",null,{\"children\":[[\"$\",\"h2\",null,{\"className\":\"__className_b47211 text-[28px] font-black text-[--lightLink] dark:text-[--darkLink]\",\"style\":{\"--lightLink\":\"lab(33.423 42.333 -42.6)\",\"--darkLink\":\"lab(78.042 20.145 -36.33)\"},\"children\":\"Preparing for a Tech Talk, Part 1: Motivation\"}],[\"$\",\"p\",null,{\"className\":\"text-[13px] text-gray-700 dark:text-gray-300\",\"children\":\"December 26, 2018\"}],[\"$\",\"p\",null,{\"className\":\"mt-1\",\"children\":\"Here’s my recipe for a good talk idea.\"}]]}]}],[\"$\",\"$Ld\",\"why-do-hooks-rely-on-call-order\",{\"className\":\"block py-4 hover:scale-[1.005]\",\"href\":\"/why-do-hooks-rely-on-call-order/\",\"children\":[\"$\",\"article\",null,{\"children\":[[\"$\",\"h2\",null,{\"className\":\"__className_b47211 text-[28px] font-black text-[--lightLink] dark:text-[--darkLink]\",\"style\":{\"--lightLink\":\"lab(33.212 42.212 -42.9)\",\"--darkLink\":\"lab(78.021 20.057 -36.54)\"},\"children\":\"Why Do React Hooks Rely on Call Order?\"}],[\"$\",\"p\",null,{\"className\":\"text-[13px] text-gray-700 dark:text-gray-300\",\"children\":\"December 13, 2018\"}],[\"$\",\"p\",null,{\"className\":\"mt-1\",\"children\":\"Lessons learned from mixins, render props, HOCs, and classes.\"}]]}]}],[\"$\",\"$Ld\",\"optimized-for-change\",{\"className\":\"block py-4 hover:scale-[1.005]\",\"href\":\"/optimized-for-change/\",\"children\":[\"$\",\"article\",null,{\"children\":[[\"$\",\"h2\",null,{\"className\":\"__className_b47211 text-[28px] font-black text-[--lightLink] dark:text-[--darkLink]\",\"style\":{\"--lightLink\":\"lab(33.195 42.202 -42.92)\",\"--darkLink\":\"lab(78.02 20.051 -36.56)\"},\"children\":\"Optimized for Change\"}],[\"$\",\"p\",null,{\"className\":\"text-[13px] text-gray-700 dark:text-gray-300\",\"children\":\"December 12, 2018\"}],[\"$\",\"p\",null,{\"className\":\"mt-1\",\"children\":\"What makes a great API?\"}]]}]}],[\"$\",\"$Ld\",\"how-does-setstate-know-what-to-do\",{\"className\":\"block py-4 hover:scale-[1.005]\",\"href\":\"/how-does-setstate-know-what-to-do/\",\"children\":[\"$\",\"article\",null,{\"children\":[[\"$\",\"h2\",null,{\"className\":\"__className_b47211 text-[28px] font-black text-[--lightLink] dark:text-[--darkLink]\",\"style\":{\"--lightLink\":\"lab(33.147 42.174 -42.99)\",\"--darkLink\":\"lab(78.015 20.031 -36.6)\"},\"children\":\"How Does setState Know What to Do?\"}],[\"$\",\"p\",null,{\"className\":\"text-[13px] text-gray-700 dark:text-gray-300\",\"children\":\"December 9, 2018\"}],[\"$\",\"p\",null,{\"className\":\"mt-1\",\"children\":\"Dependency injection is nice if you don’t have to think about it.\"}]]}]}],[\"$\",\"$Ld\",\"my-wishlist-for-hot-reloading\",{\"className\":\"block py-4 hover:scale-[1.005]\",\"href\":\"/my-wishlist-for-hot-reloading/\",\"children\":[\"$\",\"article\",null,{\"children\":[[\"$\",\"h2\",null,{\"className\":\"__className_b47211 text-[28px] font-black text-[--lightLink] dark:text-[--darkLink]\",\"style\":{\"--lightLink\":\"lab(33.13 42.165 -43.01)\",\"--darkLink\":\"lab(78.013 20.024 -36.62)\"},\"children\":\"My Wishlist for Hot Reloading\"}],[\"$\",\"p\",null,{\"className\":\"text-[13px] text-gray-700 dark:text-gray-300\",\"children\":\"December 8, 2018\"}],[\"$\",\"p\",null,{\"className\":\"mt-1\",\"children\":\"I don't want a lot for Christmas. There is just one thing I need.\"}]]}]}],[\"$\",\"$Ld\",\"why-do-react-elements-have-typeof-property\",{\"className\":\"block py-4 hover:scale-[1.005]\",\"href\":\"/why-do-react-elements-have-typeof-property/\",\"children\":[\"$\",\"article\",null,{\"children\":[[\"$\",\"h2\",null,{\"className\":\"__className_b47211 text-[28px] font-black text-[--lightLink] dark:text-[--darkLink]\",\"style\":{\"--lightLink\":\"lab(33.049 42.118 -43.12)\",\"--darkLink\":\"lab(78.005 19.99 -36.7)\"},\"children\":\"Why Do React Elements Have a $$typeof Property?\"}],[\"$\",\"p\",null,{\"className\":\"text-[13px] text-gray-700 dark:text-gray-300\",\"children\":\"December 3, 2018\"}],[\"$\",\"p\",null,{\"className\":\"mt-1\",\"children\":\"It has something to do with security.\"}]]}]}],[\"$\",\"$Ld\",\"how-does-react-tell-a-class-from-a-function\",{\"className\":\"block py-4 hover:scale-[1.005]\",\"href\":\"/how-does-react-tell-a-class-from-a-function/\",\"children\":[\"$\",\"article\",null,{\"children\":[[\"$\",\"h2\",null,{\"className\":\"__className_b47211 text-[28px] font-black text-[--lightLink] dark:text-[--darkLink]\",\"style\":{\"--lightLink\":\"lab(33.033 42.109 -43.14)\",\"--darkLink\":\"lab(78.003 19.983 -36.72)\"},\"children\":\"How Does React Tell a Class from a Function?\"}],[\"$\",\"p\",null,{\"className\":\"text-[13px] text-gray-700 dark:text-gray-300\",\"children\":\"December 2, 2018\"}],[\"$\",\"p\",null,{\"className\":\"mt-1\",\"children\":\"We talk about classes, new, instanceof, prototype chains, and API design.\"}]]}]}],[\"$\",\"$Ld\",\"why-do-we-write-super-props\",{\"className\":\"block py-4 hover:scale-[1.005]\",\"href\":\"/why-do-we-write-super-props/\",\"children\":[\"$\",\"article\",null,{\"children\":[[\"$\",\"h2\",null,{\"className\":\"__className_b47211 text-[28px] font-black text-[--lightLink] dark:text-[--darkLink]\",\"style\":{\"--lightLink\":\"lab(33 42.09 -43.19)\",\"--darkLink\":\"lab(78 19.97 -36.75)\"},\"children\":\"Why Do We Write super(props)?\"}],[\"$\",\"p\",null,{\"className\":\"text-[13px] text-gray-700 dark:text-gray-300\",\"children\":\"November 30, 2018\"}],[\"$\",\"p\",null,{\"className\":\"mt-1\",\"children\":\"There’s a twist at the end.\"}]]}]}]]}]\n"])</script><script>self.__next_f.push([1,""])</script></body></html>