Kent C. Dodds Blog https://kentcdodds.com/blog The Kent C. Dodds Blog en-us Kody the Koala 40 <![CDATA[Implementing Hybrid Semantic + Lexical Search]]> <![CDATA[Semantic search alone wasn't good enough. Here's how I improved search on kentcdodds.com through three rounds of iteration with Cursor and GPT-5.4, each time learning something that the previous design missed.]]> 2026-03-16 https://kentcdodds.com/blog/implementing-hybrid-semantic-lexical-search https://kentcdodds.com/blog/implementing-hybrid-semantic-lexical-search <![CDATA[Simplifying Containers with Cloudflare Sandboxes]]> <![CDATA[How I replaced a long-lived Cloudflare Container with a one-shot Cloudflare Sandbox, deleted most of the control-plane code, and let an agent do the heavy lifting in less than an hour of my own time.]]> 2026-03-11 https://kentcdodds.com/blog/simplifying-containers-with-cloudflare-sandboxes https://kentcdodds.com/blog/simplifying-containers-with-cloudflare-sandboxes <![CDATA[Migrating to Workspaces and Nx]]> <![CDATA[The interesting part of moving kentcdodds.com to npm workspaces was not the file moves. It was everything the file moves broke.]]> 2026-03-10 https://kentcdodds.com/blog/migrating-to-workspaces-and-nx https://kentcdodds.com/blog/migrating-to-workspaces-and-nx <![CDATA[Offloading FFmpeg with Cloudflare]]> <![CDATA[How I moved Call Kent podcast episode processing off my primary Fly.io app server and onto Cloudflare Queues and Containers: what broke, what I missed, and whether it was worth the complexity.]]> 2026-03-09 https://kentcdodds.com/blog/offloading-ffmpeg-with-cloudflare https://kentcdodds.com/blog/offloading-ffmpeg-with-cloudflare <![CDATA[Building Semantic Search on my Content]]> <![CDATA[I've added some pretty cool AI-powered features to kentcdodds.com and I want to tell you all about it.]]> 2026-02-24 https://kentcdodds.com/blog/building-semantic-search-on-my-content https://kentcdodds.com/blog/building-semantic-search-on-my-content <![CDATA[Helping YOU ask ME questions with AI]]> <![CDATA[Here's how I've made it easier for you to call into the Call Kent podcast without having to record yourself and also make yourself anonymous using AI.]]> 2026-02-24 https://kentcdodds.com/blog/helping-you-ask-me-questions-with-ai https://kentcdodds.com/blog/helping-you-ask-me-questions-with-ai <![CDATA[How I used Cursor to Migrate Frameworks]]> <![CDATA[I upgraded kentcdodds.com from Remix v2 to React Router v7 in a day with over 17k lines of code changed. Here's how I did it.]]> 2026-02-20 https://kentcdodds.com/blog/how-i-used-cursor-to-migrate-frameworks https://kentcdodds.com/blog/how-i-used-cursor-to-migrate-frameworks <![CDATA[The Dow's Start on the Covenant Path]]> <![CDATA[My experience sharing the gospel with Jeremiah and Beiyi Dow]]> 2026-01-05 https://kentcdodds.com/blog/the-dows-start-on-the-covenant-path https://kentcdodds.com/blog/the-dows-start-on-the-covenant-path <![CDATA[2025 in Review]]> <![CDATA[Looking back over my 2025 and looking forward to my 2026]]> 2025-12-31 https://kentcdodds.com/blog/2025-in-review https://kentcdodds.com/blog/2025-in-review <![CDATA[The next chapter: EpicAI.pro]]> <![CDATA[What I'm working on with AI education and why I think it's the future.]]> 2025-04-10 https://kentcdodds.com/blog/the-next-chapter-epicai-pro https://kentcdodds.com/blog/the-next-chapter-epicai-pro <![CDATA[AI is taking your job]]> <![CDATA[AI is changing how hiring works, and that makes in person connections even more important.]]> 2024-11-21 https://kentcdodds.com/blog/ai-is-taking-your-job https://kentcdodds.com/blog/ai-is-taking-your-job <![CDATA[How I increased my visibility]]> <![CDATA[Someone asked me this and here's my answer.]]> 2024-10-29 https://kentcdodds.com/blog/how-i-increased-my-visibility https://kentcdodds.com/blog/how-i-increased-my-visibility <![CDATA[2023 in Review]]> <![CDATA[A review of what happened in the life of Kent C. Dodds in 2023]]> 2023-12-20 https://kentcdodds.com/blog/2023-in-review https://kentcdodds.com/blog/2023-in-review <![CDATA[Launching Epic Web]]> <![CDATA[The story of how Epic Web came to be]]> 2023-12-20 https://kentcdodds.com/blog/launching-epic-web https://kentcdodds.com/blog/launching-epic-web <![CDATA[Stop Being a Junior]]> <![CDATA[Some advise for people who still consider themselves junior developers]]> 2023-05-30 https://kentcdodds.com/blog/stop-being-a-junior https://kentcdodds.com/blog/stop-being-a-junior <![CDATA[RSC with Dan Abramov and Joe Savona Live Stream]]> <![CDATA[I had a live streamed conversation with Joe Savona and Dan Abramov. Here's a summary of our discussion.]]> 2023-03-14 https://kentcdodds.com/blog/rsc-with-dan-abramov-and-joe-savona-live-stream https://kentcdodds.com/blog/rsc-with-dan-abramov-and-joe-savona-live-stream <![CDATA[Fixing a Memory Leak in a Production Node.js App]]> <![CDATA[How I found and fixed a memory leak on kentcdodds.com]]> 2023-01-12 https://kentcdodds.com/blog/fixing-a-memory-leak-in-a-production-node-js-app https://kentcdodds.com/blog/fixing-a-memory-leak-in-a-production-node-js-app <![CDATA[2022 in Review]]> <![CDATA[A review of what happened in the KCD world in 2022]]> 2022-12-29 https://kentcdodds.com/blog/2022-in-review https://kentcdodds.com/blog/2022-in-review <![CDATA[My Car Accident]]> <![CDATA[I was involved in a very bad car accident in 2022. Here's the story.]]> 2022-12-29 https://kentcdodds.com/blog/my-car-accident https://kentcdodds.com/blog/my-car-accident <![CDATA[I Migrated from a Postgres Cluster to Distributed SQLite with LiteFS]]> <![CDATA[Why and how I migrated from distributed postgres to distributed sqlite on kentcdodds.com]]> 2022-11-21 https://kentcdodds.com/blog/i-migrated-from-a-postgres-cluster-to-distributed-sqlite-with-litefs https://kentcdodds.com/blog/i-migrated-from-a-postgres-cluster-to-distributed-sqlite-with-litefs <![CDATA[I'm building EpicWeb.dev]]> <![CDATA[I've struck out on my own again to focus on my most ambitious project yet.]]> 2022-09-07 https://kentcdodds.com/blog/i-m-building-epicweb-dev https://kentcdodds.com/blog/i-m-building-epicweb-dev <![CDATA[A review of my time at Remix]]> <![CDATA[As I move on to my next adventure, I want to take this opportunity to review what I accomplished while at Remix.]]> 2022-09-06 https://kentcdodds.com/blog/a-review-of-my-time-at-remix https://kentcdodds.com/blog/a-review-of-my-time-at-remix <![CDATA[Remix: The Yang to React's Yin]]> <![CDATA[Remix fills the missing piece that all React web applications need: The Network Chasm]]> 2022-03-24 https://kentcdodds.com/blog/remix-the-yang-to-react-s-yin https://kentcdodds.com/blog/remix-the-yang-to-react-s-yin <![CDATA[How I help you build better websites]]> <![CDATA[I'm making a career move to more effectively help you make the web (and the world) better.]]> 2021-11-15 https://kentcdodds.com/blog/how-i-help-you-build-better-websites https://kentcdodds.com/blog/how-i-help-you-build-better-websites <![CDATA[Why I Love Remix]]> <![CDATA[I've written tens of thousands of lines of code with Remix and I want to tell you why I love using this framework.]]> 2021-11-13 https://kentcdodds.com/blog/why-i-love-remix https://kentcdodds.com/blog/why-i-love-remix <![CDATA[The State Initializer Pattern]]> <![CDATA[A simple pattern used in libraries like downshift and ReachUI to enable component/hook users to initialize your state and even reset it to that initial value.]]> 2021-11-05 https://kentcdodds.com/blog/the-state-initializer-pattern https://kentcdodds.com/blog/the-state-initializer-pattern <![CDATA[How to React ⚛️]]> <![CDATA[Let's see how learning React ⚛️ in the right order can make it less overwhelming.]]> 2021-11-03 https://kentcdodds.com/blog/how-to-react https://kentcdodds.com/blog/how-to-react <![CDATA[Get a catch block error message with TypeScript]]> <![CDATA[TypeScript forces you to acknowledge you can't know what was thrown making getting the error message a pain. Here's how you can manage it.]]> 2021-10-28 https://kentcdodds.com/blog/get-a-catch-block-error-message-with-typescript https://kentcdodds.com/blog/get-a-catch-block-error-message-with-typescript <![CDATA[Building an awesome image loading experience]]> <![CDATA[How Unsplash's blurred image loading works and why I did mine differently for a more excellent experience on my site.]]> 2021-10-19 https://kentcdodds.com/blog/building-an-awesome-image-loading-experience https://kentcdodds.com/blog/building-an-awesome-image-loading-experience <![CDATA[How Remix makes CSS clashes predictable]]> <![CDATA[Remix has this beautifully simple feature for CSS that I want to tell you all about.]]> 2021-10-13 https://kentcdodds.com/blog/how-remix-makes-css-clashes-predictable https://kentcdodds.com/blog/how-remix-makes-css-clashes-predictable <![CDATA[How I built a modern website in 2021]]> <![CDATA[I rewrote kentcdodds.com using the latest technologies and I want to talk about what I did.]]> 2021-09-29 https://kentcdodds.com/blog/how-i-built-a-modern-website-in-2021 https://kentcdodds.com/blog/how-i-built-a-modern-website-in-2021 <![CDATA[How to use React Context effectively]]> <![CDATA[How to create and expose React Context providers and consumers]]> 2021-06-05 https://kentcdodds.com/blog/how-to-use-react-context-effectively https://kentcdodds.com/blog/how-to-use-react-context-effectively <![CDATA[Static vs Unit vs Integration vs E2E Testing for Frontend Apps]]> <![CDATA[What these mean, why they matter, and why they don't]]> 2021-06-03 https://kentcdodds.com/blog/static-vs-unit-vs-integration-vs-e2e-tests https://kentcdodds.com/blog/static-vs-unit-vs-integration-vs-e2e-tests <![CDATA[The Testing Trophy and Testing Classifications]]> <![CDATA[How to interpret the testing trophy for optimal clarity]]> 2021-06-03 https://kentcdodds.com/blog/the-testing-trophy-and-testing-classifications https://kentcdodds.com/blog/the-testing-trophy-and-testing-classifications <![CDATA[Array reduce vs chaining vs for loop]]> <![CDATA[A comparison of different approaches to operating on an array]]> 2021-05-24 https://kentcdodds.com/blog/array-reduce-vs-chaining-vs-for-loop https://kentcdodds.com/blog/array-reduce-vs-chaining-vs-for-loop <![CDATA[Don't Solve Problems, Eliminate Them]]> <![CDATA[How eliminating problems can drastically simplify your codebases and life]]> 2021-05-11 https://kentcdodds.com/blog/don-t-solve-problems-eliminate-them https://kentcdodds.com/blog/don-t-solve-problems-eliminate-them <![CDATA[Super Simple Start to Remix]]> <![CDATA[The simplest distraction-free version of a remix app]]> 2021-05-03 https://kentcdodds.com/blog/super-simple-start-to-remix https://kentcdodds.com/blog/super-simple-start-to-remix <![CDATA[Super Simple Start to ESModules in Node.js]]> <![CDATA[All supported versions of Node.js support ESModules now. Here's how to get started using them.]]> 2021-04-08 https://kentcdodds.com/blog/super-simple-start-to-es-modules-in-node-js https://kentcdodds.com/blog/super-simple-start-to-es-modules-in-node-js <![CDATA[JavaScript Pass By Value Function Parameters]]> <![CDATA[How it works and how to work with it... and around it]]> 2021-03-23 https://kentcdodds.com/blog/javascript-pass-by-value-function-parameters https://kentcdodds.com/blog/javascript-pass-by-value-function-parameters <![CDATA[How to write a Constrained Identity Function (CIF) in TypeScript]]> <![CDATA[A handy advanced TypeScript pattern to increase your productivity.]]> 2021-03-09 https://kentcdodds.com/blog/how-to-write-a-constrained-identity-function-in-typescript https://kentcdodds.com/blog/how-to-write-a-constrained-identity-function-in-typescript <![CDATA[How to optimize your context value]]> <![CDATA[Why and how you can optimize your context provider's value to avoid performance issues]]> 2021-03-08 https://kentcdodds.com/blog/how-to-optimize-your-context-value https://kentcdodds.com/blog/how-to-optimize-your-context-value <![CDATA[How to write a React Component in TypeScript]]> <![CDATA[There are plenty of ways to do it, here's how I recommend typing React Components]]> 2021-03-04 https://kentcdodds.com/blog/how-to-write-a-react-component-in-typescript https://kentcdodds.com/blog/how-to-write-a-react-component-in-typescript <![CDATA[TypeScript Function Syntaxes]]> <![CDATA[The syntax for various functions and function types in TypeScript with simple examples.]]> 2021-02-25 https://kentcdodds.com/blog/typescript-function-syntaxes https://kentcdodds.com/blog/typescript-function-syntaxes <![CDATA[Listify a JavaScript Array]]> <![CDATA[Make a human readable list from an array in JavaScript.]]> 2021-02-18 https://kentcdodds.com/blog/listify-a-java-script-array https://kentcdodds.com/blog/listify-a-java-script-array <![CDATA[Build vs Buy: Component Libraries edition]]> <![CDATA[Some things to think about before you decide to create your own component library.]]> 2021-02-04 https://kentcdodds.com/blog/build-vs-buy-component-libraries-edition https://kentcdodds.com/blog/build-vs-buy-component-libraries-edition <![CDATA[Using fetch with TypeScript]]> <![CDATA[How to make HTTP requests with fetch and TypeScript]]> 2021-01-26 https://kentcdodds.com/blog/using-fetch-with-type-script https://kentcdodds.com/blog/using-fetch-with-type-script <![CDATA[Wrapping React.useState with TypeScript]]> <![CDATA[How to make a custom hook that wraps useState with TypeScript properly]]> 2021-01-19 https://kentcdodds.com/blog/wrapping-react-use-state-with-type-script https://kentcdodds.com/blog/wrapping-react-use-state-with-type-script <![CDATA[Define function overload types with TypeScript]]> <![CDATA[Have your JS expressiveness and type it too.]]> 2021-01-12 https://kentcdodds.com/blog/define-function-overload-types-with-type-script https://kentcdodds.com/blog/define-function-overload-types-with-type-script <![CDATA[2020 in Review]]> <![CDATA[An overview of what I accomplished in 2020 and a bit about my goals for 2021.]]> 2021-01-04 https://kentcdodds.com/blog/2020-in-review https://kentcdodds.com/blog/2020-in-review <![CDATA[Business and Engineering alignment]]> <![CDATA[How to convince "the business folks" to let you do what you want.]]> 2020-12-10 https://kentcdodds.com/blog/business-and-engineering-alignment https://kentcdodds.com/blog/business-and-engineering-alignment <![CDATA[Hi, thanks for reaching out to me 👋]]> <![CDATA[How to get help from Kent]]> 2020-12-02 https://kentcdodds.com/blog/hi-thanks-for-reaching-out-to-me https://kentcdodds.com/blog/hi-thanks-for-reaching-out-to-me <![CDATA[useEffect vs useLayoutEffect]]> <![CDATA[The simple rules for when to use each.]]> 2020-12-01 https://kentcdodds.com/blog/useeffect-vs-uselayouteffect https://kentcdodds.com/blog/useeffect-vs-uselayouteffect <![CDATA[Super simple start to Firebase functions]]> <![CDATA[The simplest getting started guide for Firebase Cloud functions]]> 2020-11-12 https://kentcdodds.com/blog/super-simple-start-to-firebase-functions https://kentcdodds.com/blog/super-simple-start-to-firebase-functions <![CDATA[Super simple start to Netlify functions]]> <![CDATA[Easily create server code without worrying about managing servers yourself]]> 2020-11-11 https://kentcdodds.com/blog/super-simple-start-to-netlify-functions https://kentcdodds.com/blog/super-simple-start-to-netlify-functions <![CDATA[Super Simple Start to css variables]]> <![CDATA[How to get started using css variables]]> 2020-10-28 https://kentcdodds.com/blog/super-simple-start-to-css-variables https://kentcdodds.com/blog/super-simple-start-to-css-variables <![CDATA[Favor Progress Over Pride in Open Source]]> <![CDATA[How I deprecated my most popular open source project in favor of a better library]]> 2020-08-24 https://kentcdodds.com/blog/favor-progress-over-pride-in-open-source https://kentcdodds.com/blog/favor-progress-over-pride-in-open-source <![CDATA[Testing Implementation Details]]> <![CDATA[Testing implementation details is a recipe for disaster. Why is that? And what does it even mean?]]> 2020-08-17 https://kentcdodds.com/blog/testing-implementation-details https://kentcdodds.com/blog/testing-implementation-details <![CDATA[How getting into Open Source has been awesome for me]]> <![CDATA[An anecdotal argument for contributing and using open source]]> 2020-08-10 https://kentcdodds.com/blog/how-getting-into-open-source-has-been-awesome-for-me https://kentcdodds.com/blog/how-getting-into-open-source-has-been-awesome-for-me <![CDATA[useState lazy initialization and function updates]]> <![CDATA[When to pass a function to useState and setState]]> 2020-08-03 https://kentcdodds.com/blog/use-state-lazy-initialization-and-function-updates https://kentcdodds.com/blog/use-state-lazy-initialization-and-function-updates <![CDATA[Use ternaries rather than && in JSX]]> <![CDATA[What problems can happen when you use && to conditionally render content in JSX]]> 2020-07-27 https://kentcdodds.com/blog/use-ternaries-rather-than-and-and-in-jsx https://kentcdodds.com/blog/use-ternaries-rather-than-and-and-in-jsx <![CDATA[Application State Management with React]]> <![CDATA[How React is all you need to manage your application state]]> 2020-07-21 https://kentcdodds.com/blog/application-state-management-with-react https://kentcdodds.com/blog/application-state-management-with-react <![CDATA[Use react-error-boundary to handle errors in React]]> <![CDATA[How to simplify your React apps by handling React errors effectively with react-error-boundary]]> 2020-07-20 https://kentcdodds.com/blog/use-react-error-boundary-to-handle-errors-in-react https://kentcdodds.com/blog/use-react-error-boundary-to-handle-errors-in-react <![CDATA[JavaScript to Know for React]]> <![CDATA[What JavaScript features you should be familiar with when learning and using React]]> 2020-07-15 https://kentcdodds.com/blog/javascript-to-know-for-react https://kentcdodds.com/blog/javascript-to-know-for-react <![CDATA[How I structure Express apps]]> <![CDATA[The build/dev tools and scripts I use for Node backends.]]> 2020-07-13 https://kentcdodds.com/blog/how-i-structure-express-apps https://kentcdodds.com/blog/how-i-structure-express-apps <![CDATA[What open source project should I contribute to?]]> <![CDATA[My silver bullet answer to this frequently posed question, and how to get started]]> 2020-07-06 https://kentcdodds.com/blog/what-open-source-project-should-i-contribute-to https://kentcdodds.com/blog/what-open-source-project-should-i-contribute-to <![CDATA[When I follow TDD]]> <![CDATA[Test-Driven Development doesn't always make sense, here's when it does for me.]]> 2020-06-29 https://kentcdodds.com/blog/when-i-follow-tdd https://kentcdodds.com/blog/when-i-follow-tdd <![CDATA[AHA Programming 💡]]> <![CDATA[The dangers of DRY, the web of WET, the awesomeness of AHA.]]> 2020-06-22 https://kentcdodds.com/blog/aha-programming https://kentcdodds.com/blog/aha-programming <![CDATA[How I Record Educational Videos]]> <![CDATA[My process for making high value-to-minute content.]]> 2020-06-22 https://kentcdodds.com/blog/how-i-record-educational-videos https://kentcdodds.com/blog/how-i-record-educational-videos <![CDATA[Should I write a test or fix a bug?]]> <![CDATA[How to prioritize tests relative to everything else.]]> 2020-06-15 https://kentcdodds.com/blog/should-i-write-a-test-or-fix-a-bug https://kentcdodds.com/blog/should-i-write-a-test-or-fix-a-bug <![CDATA[Stop mocking fetch]]> <![CDATA[Why you shouldn't mock fetch or your API Client in your tests and what to do instead.]]> 2020-06-03 https://kentcdodds.com/blog/stop-mocking-fetch https://kentcdodds.com/blog/stop-mocking-fetch <![CDATA[Intentional Career Building]]> <![CDATA[A challenge and ideas for you to do something to build your career.]]> 2020-05-26 https://kentcdodds.com/blog/intentional-career-building https://kentcdodds.com/blog/intentional-career-building <![CDATA[Improve test error messages of your abstractions]]> <![CDATA[How to manipulate stack traces to get beautiful error messages with Jest and your test helper functions.]]> 2020-05-18 https://kentcdodds.com/blog/improve-test-error-messages-of-your-abstractions https://kentcdodds.com/blog/improve-test-error-messages-of-your-abstractions <![CDATA[Tracing user interactions with React]]> <![CDATA[How to use the (EXPERIMENTAL) interactions tracing API in React.]]> 2020-05-08 https://kentcdodds.com/blog/tracing-user-interactions-with-react https://kentcdodds.com/blog/tracing-user-interactions-with-react <![CDATA[Eliminate an entire category of bugs with a few simple tools]]> <![CDATA[How you can use a few simple static code analysis tools to avoid common programming bugs.]]> 2020-05-07 https://kentcdodds.com/blog/eliminate-an-entire-category-of-bugs-with-a-few-simple-tools https://kentcdodds.com/blog/eliminate-an-entire-category-of-bugs-with-a-few-simple-tools <![CDATA[Common mistakes with React Testing Library]]> <![CDATA[Some mistakes I frequently see people making with React Testing Library.]]> 2020-05-04 https://kentcdodds.com/blog/common-mistakes-with-react-testing-library https://kentcdodds.com/blog/common-mistakes-with-react-testing-library <![CDATA[Super Simple Start to React]]> <![CDATA[The most simple React setup imaginable]]> 2020-04-24 https://kentcdodds.com/blog/super-simple-start-to-react https://kentcdodds.com/blog/super-simple-start-to-react <![CDATA[Stop using client-side route redirects]]> <![CDATA[Why you should stop using client-side route redirects (like the `from` prop on React Router's Redirect component) and what you should do instead.]]> 2020-04-13 https://kentcdodds.com/blog/stop-using-client-side-route-redirects https://kentcdodds.com/blog/stop-using-client-side-route-redirects <![CDATA[The State Reducer Pattern with React Hooks]]> <![CDATA[A pattern for you to use in custom hooks to enhance the power and flexibility of your hooks.]]> 2020-04-06 https://kentcdodds.com/blog/the-state-reducer-pattern-with-react-hooks https://kentcdodds.com/blog/the-state-reducer-pattern-with-react-hooks <![CDATA[Function forms]]> <![CDATA[When I prefer to use function declarations instead of arrow functions]]> 2020-04-05 https://kentcdodds.com/blog/function-forms https://kentcdodds.com/blog/function-forms <![CDATA[Replace axios with a simple custom fetch wrapper]]> <![CDATA[Axios can do a ton of stuff, but here's a simpler solution that can handle most use cases]]> 2020-03-30 https://kentcdodds.com/blog/replace-axios-with-a-simple-custom-fetch-wrapper https://kentcdodds.com/blog/replace-axios-with-a-simple-custom-fetch-wrapper <![CDATA[How to test custom React hooks]]> <![CDATA[Get confidence your custom React hooks work properly with solid tests.]]> 2020-03-22 https://kentcdodds.com/blog/how-to-test-custom-react-hooks https://kentcdodds.com/blog/how-to-test-custom-react-hooks <![CDATA[React Production Performance Monitoring]]> <![CDATA[How to set up performance monitoring for production React applications.]]> 2020-03-16 https://kentcdodds.com/blog/react-production-performance-monitoring https://kentcdodds.com/blog/react-production-performance-monitoring <![CDATA[Should I useState or useReducer?]]> <![CDATA[Two built-in React hooks that handle state, which one should you use?]]> 2020-03-09 https://kentcdodds.com/blog/should-i-usestate-or-usereducer https://kentcdodds.com/blog/should-i-usestate-or-usereducer <![CDATA[Stop using isLoading booleans]]> <![CDATA[Why using a status enum (or even better: a **state machine**) will help your app stay bug free]]> 2020-03-02 https://kentcdodds.com/blog/stop-using-isloading-booleans https://kentcdodds.com/blog/stop-using-isloading-booleans <![CDATA[Make Your Test Fail]]> <![CDATA[If you're not careful you can write a test that's worse than having no tests at all]]> 2020-02-24 https://kentcdodds.com/blog/make-your-test-fail https://kentcdodds.com/blog/make-your-test-fail <![CDATA[Make your own DevTools]]> <![CDATA[How creating DevTools specific for your own app can improve your productivity]]> 2020-02-17 https://kentcdodds.com/blog/make-your-own-dev-tools https://kentcdodds.com/blog/make-your-own-dev-tools <![CDATA[An Argument for Automation]]> <![CDATA[Why it can be worth spending 1 hour automating a 10 second task]]> 2020-02-10 https://kentcdodds.com/blog/automation https://kentcdodds.com/blog/automation <![CDATA[Fix the "not wrapped in act(...)" warning]]> <![CDATA[There are a few reasons you're getting this warning. Here's how you fix it.]]> 2020-02-03 https://kentcdodds.com/blog/fix-the-not-wrapped-in-act-warning https://kentcdodds.com/blog/fix-the-not-wrapped-in-act-warning <![CDATA[Super Simple Start to ESModules in the Browser]]> <![CDATA[All major browsers support ESModules now. Here's how to get started using them.]]> 2020-01-22 https://kentcdodds.com/blog/super-simple-start-to-es-modules-in-the-browser https://kentcdodds.com/blog/super-simple-start-to-es-modules-in-the-browser <![CDATA[Implementing a simple state machine library in JavaScript]]> <![CDATA[Let's write a state machine abstraction together to understand it better]]> 2020-01-20 https://kentcdodds.com/blog/implementing-a-simple-state-machine-library-in-javascript https://kentcdodds.com/blog/implementing-a-simple-state-machine-library-in-javascript <![CDATA[2010s Decade in Review]]> <![CDATA[The 2010s are over, time to think back, then forward]]> 2019-12-31 https://kentcdodds.com/blog/2010s-decade-in-review https://kentcdodds.com/blog/2010s-decade-in-review <![CDATA[Why users care about how you write code]]> <![CDATA[Your coding practices and technology choices impact user experience...]]> 2019-12-23 https://kentcdodds.com/blog/why-users-care-about-how-you-write-code https://kentcdodds.com/blog/why-users-care-about-how-you-write-code <![CDATA[Why I avoid nesting closures]]> <![CDATA[A little tendency I have to reduce cognitive load for readers of my code.]]> 2019-12-13 https://kentcdodds.com/blog/why-i-avoid-nesting-closures https://kentcdodds.com/blog/why-i-avoid-nesting-closures <![CDATA[Don't call a React function component]]> <![CDATA[The difference between React.createElement and calling a function component directly]]> 2019-12-08 https://kentcdodds.com/blog/dont-call-a-react-function-component https://kentcdodds.com/blog/dont-call-a-react-function-component <![CDATA[Why your team needs TestingJavaScript.com]]> <![CDATA[A letter you can copy/paste and send to your boss.]]> 2019-12-03 https://kentcdodds.com/blog/why-your-team-needs-testing-javascript-com https://kentcdodds.com/blog/why-your-team-needs-testing-javascript-com <![CDATA[Inversion of Control]]> <![CDATA[A simple principle that can drastically improve your reusable code]]> 2019-11-18 https://kentcdodds.com/blog/inversion-of-control https://kentcdodds.com/blog/inversion-of-control <![CDATA[Understanding React's key prop]]> <![CDATA[The key prop is a mechanism for controlling component instances.]]> 2019-11-11 https://kentcdodds.com/blog/understanding-reacts-key-prop https://kentcdodds.com/blog/understanding-reacts-key-prop <![CDATA[How to Enable React Concurrent Mode]]> <![CDATA[Concurrent Mode is an enormous improvement for user experience and developer experience. Here's how you enable it.]]> 2019-11-04 https://kentcdodds.com/blog/how-to-enable-react-concurrent-mode https://kentcdodds.com/blog/how-to-enable-react-concurrent-mode <![CDATA[How to add testing to an existing project]]> <![CDATA[This is how you get started in testing your application]]> 2019-10-28 https://kentcdodds.com/blog/how-to-add-testing-to-an-existing-project https://kentcdodds.com/blog/how-to-add-testing-to-an-existing-project <![CDATA[Building the Open Source Community We Want]]> <![CDATA[Let's be intentional about the open source community we want and work hard to build it.]]> 2019-10-08 https://kentcdodds.com/blog/building-the-open-source-community-we-want https://kentcdodds.com/blog/building-the-open-source-community-we-want <![CDATA[Making your UI tests resilient to change]]> <![CDATA[User interface tests are famously finicky and prone to breakage. Let's talk about how to improve this.]]> 2019-10-07 https://kentcdodds.com/blog/making-your-ui-tests-resilient-to-change https://kentcdodds.com/blog/making-your-ui-tests-resilient-to-change <![CDATA[Speed up your App with Web Workers]]> <![CDATA[How to get started using web workers for practical use cases]]> 2019-10-04 https://kentcdodds.com/blog/speed-up-your-app-with-web-workers https://kentcdodds.com/blog/speed-up-your-app-with-web-workers <![CDATA[Don't Sync State. Derive It!]]> <![CDATA[How to avoid state synchronization bugs and complexity with derived state.]]> 2019-09-30 https://kentcdodds.com/blog/dont-sync-state-derive-it https://kentcdodds.com/blog/dont-sync-state-derive-it <![CDATA[State Colocation will make your React app faster]]> <![CDATA[How state colocation makes your app not only more maintainable but also faster.]]> 2019-09-23 https://kentcdodds.com/blog/state-colocation-will-make-your-react-app-faster https://kentcdodds.com/blog/state-colocation-will-make-your-react-app-faster <![CDATA[Profile a React App for Performance]]> <![CDATA[How to use the React DevTools and React's profiling build to properly profile a production app]]> 2019-09-16 https://kentcdodds.com/blog/profile-a-react-app-for-performance https://kentcdodds.com/blog/profile-a-react-app-for-performance <![CDATA[Fix the slow render before you fix the re-render]]> <![CDATA[How to start optimizing your React app renders]]> 2019-09-09 https://kentcdodds.com/blog/fix-the-slow-render-before-you-fix-the-re-render https://kentcdodds.com/blog/fix-the-slow-render-before-you-fix-the-re-render <![CDATA[How to implement useState with useReducer]]> <![CDATA[A fun exercise to help understand the differences and use cases of these two related hooks]]> 2019-08-30 https://kentcdodds.com/blog/how-to-implement-usestate-with-usereducer https://kentcdodds.com/blog/how-to-implement-usestate-with-usereducer <![CDATA[Write fewer, longer tests]]> <![CDATA[Making tests too short often leads to poor testing practices and way more tests.]]> 2019-08-26 https://kentcdodds.com/blog/write-fewer-longer-tests https://kentcdodds.com/blog/write-fewer-longer-tests <![CDATA[How to get experience as a software engineer]]> <![CDATA[There's no shortcut to experience, but there are things you can do to increase the impact of your time.]]> 2019-08-12 https://kentcdodds.com/blog/how-to-get-experience-as-a-software-engineer https://kentcdodds.com/blog/how-to-get-experience-as-a-software-engineer <![CDATA[5 Tips to Help You Avoid React Hooks Pitfalls]]> <![CDATA[Let's explore some hook gotchas and how to avoid them.]]> 2019-08-05 https://kentcdodds.com/blog/react-hooks-pitfalls https://kentcdodds.com/blog/react-hooks-pitfalls <![CDATA[Avoid Nesting when you're Testing]]> <![CDATA[Why using hooks like beforeEach as a mechanism for code reuse leads to unmaintainable tests and how to avoid it.]]> 2019-07-29 https://kentcdodds.com/blog/avoid-nesting-when-youre-testing https://kentcdodds.com/blog/avoid-nesting-when-youre-testing <![CDATA[When to break up a component into multiple components]]> <![CDATA[At what point does it make sense to break a single component into multiple components?]]> 2019-07-19 https://kentcdodds.com/blog/when-to-break-up-a-component-into-multiple-components https://kentcdodds.com/blog/when-to-break-up-a-component-into-multiple-components <![CDATA[Write tests. Not too many. Mostly integration.]]> <![CDATA[[Guillermo Rauch](https://x.com/rauchg) [tweeted](https://x.com/rauchg/status/807626710350839808) this a while back. Let's take a dive into what it means.]]> 2019-07-13 https://kentcdodds.com/blog/write-tests https://kentcdodds.com/blog/write-tests <![CDATA[React Fundamentals: Props vs State]]> <![CDATA[What's the difference between props and state in React?]]> 2019-07-08 https://kentcdodds.com/blog/props-vs-state https://kentcdodds.com/blog/props-vs-state <![CDATA[How I Teach]]> <![CDATA[How I apply the science of learning to help students retain what I teach them, and how I learn.]]> 2019-07-01 https://kentcdodds.com/blog/how-i-teach https://kentcdodds.com/blog/how-i-teach <![CDATA[One simple trick to optimize React re-renders]]> <![CDATA[Without using React.memo, PureComponent, or shouldComponentUpdate]]> 2019-06-24 https://kentcdodds.com/blog/optimize-react-re-renders https://kentcdodds.com/blog/optimize-react-re-renders <![CDATA[Colocation]]> <![CDATA[Maintainability through colocation]]> 2019-06-17 https://kentcdodds.com/blog/colocation https://kentcdodds.com/blog/colocation <![CDATA[When to useMemo and useCallback]]> <![CDATA[Performance optimizations ALWAYS come with a cost but do NOT always come with a benefit. Let's talk about the costs and benefits of useMemo and useCallback.]]> 2019-06-04 https://kentcdodds.com/blog/usememo-and-usecallback https://kentcdodds.com/blog/usememo-and-usecallback <![CDATA[Avoid the Test User]]> <![CDATA[How your UI code has only two users, but the wrong tests can add a third]]> 2019-05-24 https://kentcdodds.com/blog/avoid-the-test-user https://kentcdodds.com/blog/avoid-the-test-user <![CDATA[Authentication in React Applications]]> <![CDATA[How to handle user authentication in modern React Applications with context and hooks]]> 2019-05-20 https://kentcdodds.com/blog/authentication-in-react-applications https://kentcdodds.com/blog/authentication-in-react-applications <![CDATA[How to know what to test]]> <![CDATA[Practical advice to help you determine what to test.]]> 2019-04-13 https://kentcdodds.com/blog/how-to-know-what-to-test https://kentcdodds.com/blog/how-to-know-what-to-test <![CDATA[AHA Testing 💡]]> <![CDATA[How to apply the "Avoid Hasty Abstraction" principle to your test code.]]> 2019-04-07 https://kentcdodds.com/blog/aha-testing https://kentcdodds.com/blog/aha-testing <![CDATA[How to get started with programming]]> <![CDATA[So you want to get into programming? Here's how you get started.]]> 2019-03-06 https://kentcdodds.com/blog/how-to-get-started-with-programming https://kentcdodds.com/blog/how-to-get-started-with-programming <![CDATA[How to Enable React Strict Mode]]> <![CDATA[What it is and how to add it to your app.]]> 2019-03-04 https://kentcdodds.com/blog/react-strict-mode https://kentcdodds.com/blog/react-strict-mode <![CDATA[Goodbye Medium]]> <![CDATA[I've migrated from Medium to kentcdodds.com/blog... Here's why]]> 2019-02-25 https://kentcdodds.com/blog/goodbye-medium https://kentcdodds.com/blog/goodbye-medium <![CDATA[React Hooks: Compound Components]]> <![CDATA[How do compound components change with React hooks?]]> 2019-02-18 https://kentcdodds.com/blog/compound-components-with-react-hooks https://kentcdodds.com/blog/compound-components-with-react-hooks <![CDATA[🚨 Big Announcement: I'm a full-time educator! 👨‍🏫]]> <![CDATA[After years of teaching on the side, I've decided to take the plunge and go full-time as an educator!]]> 2019-02-17 https://kentcdodds.com/blog/full-time-educator https://kentcdodds.com/blog/full-time-educator <![CDATA[Please stop building inaccessible forms (and how to fix them)]]> <![CDATA[I regularly find inaccessible forms. In this post we'll check out some common accessibility problems and fix them.]]> 2019-02-04 https://kentcdodds.com/blog/please-stop-building-inaccessible-forms-and-how-to-fix-them https://kentcdodds.com/blog/please-stop-building-inaccessible-forms-and-how-to-fix-them <![CDATA[2018 in Review]]> <![CDATA[An overview of what I've accomplished in 2018 and a bit about my goals for 2019.]]> 2019-01-14 https://kentcdodds.com/blog/2018-in-review https://kentcdodds.com/blog/2018-in-review <![CDATA[React Hooks: Array Destructuring Fundamentals]]> <![CDATA[React's upcoming useState hook relies on array destructuring, let's dive in and see how that feature works.]]> 2018-12-31 https://kentcdodds.com/blog/react-hooks-array-destructuring-fundamentals https://kentcdodds.com/blog/react-hooks-array-destructuring-fundamentals <![CDATA[React Hooks: What's going to happen to my tests?]]> <![CDATA[How can we prepare our tests for React's new hooks feature?]]> 2018-12-24 https://kentcdodds.com/blog/react-hooks-whats-going-to-happen-to-my-tests https://kentcdodds.com/blog/react-hooks-whats-going-to-happen-to-my-tests <![CDATA[React Hooks: What's going to happen to react context?]]> <![CDATA[With the cool new stuff coming to React (Hooks/Suspense), what's going to happen to the context api?]]> 2018-12-17 https://kentcdodds.com/blog/react-hooks-whats-going-to-happen-to-react-context https://kentcdodds.com/blog/react-hooks-whats-going-to-happen-to-react-context <![CDATA[React Hooks: What's going to happen to render props?]]> <![CDATA[What am I going to do with all these render props components now that react hooks solve the code reuse problem better than render props ever did?]]> 2018-12-10 https://kentcdodds.com/blog/react-hooks-whats-going-to-happen-to-render-props https://kentcdodds.com/blog/react-hooks-whats-going-to-happen-to-render-props <![CDATA[How Gratitude can make you a better developer]]> <![CDATA[What does gratitude have to do with software development?]]> 2018-12-03 https://kentcdodds.com/blog/how-gratitude-can-make-you-a-better-developer https://kentcdodds.com/blog/how-gratitude-can-make-you-a-better-developer <![CDATA[Introducing a new course: Simplify React Apps with React Hooks and Suspense]]> <![CDATA[Learn about the massive improvements coming to function components in React via a fresh new course showing you how to refactor an existing...]]> 2018-12-03 https://kentcdodds.com/blog/introducing-a-new-course-simplify-react-apps-with-react-hooks-and-suspense https://kentcdodds.com/blog/introducing-a-new-course-simplify-react-apps-with-react-hooks-and-suspense <![CDATA[Common Testing Mistakes]]> <![CDATA[Today let's talk about some common mistakes that people make when testing JavaScript applications.]]> 2018-11-12 https://kentcdodds.com/blog/common-testing-mistakes https://kentcdodds.com/blog/common-testing-mistakes <![CDATA[UI Testing Myths]]> <![CDATA[Some common myths around testing and what the reality is...]]> 2018-11-08 https://kentcdodds.com/blog/ui-testing-myths https://kentcdodds.com/blog/ui-testing-myths <![CDATA[The Merits of Mocking]]> <![CDATA[What are you doing when you mock something, and when is it worth the cost?]]> 2018-11-05 https://kentcdodds.com/blog/the-merits-of-mocking https://kentcdodds.com/blog/the-merits-of-mocking <![CDATA[The time I messed up]]> <![CDATA[That time I went too far with Test Driven Development and forgot a very important step]]> 2018-10-22 https://kentcdodds.com/blog/the-time-i-messed-up https://kentcdodds.com/blog/the-time-i-messed-up <![CDATA[React is an implementation detail]]> <![CDATA[...yep, you read that right. Most of the course actually has nothing to do with React specifically.]]> 2018-10-20 https://kentcdodds.com/blog/react-is-an-implementation-detail https://kentcdodds.com/blog/react-is-an-implementation-detail <![CDATA[Why you've been bad about testing]]> <![CDATA[Some common struggles people have with testing, and things you can do to improve.]]> 2018-10-15 https://kentcdodds.com/blog/why-youve-been-bad-about-testing https://kentcdodds.com/blog/why-youve-been-bad-about-testing <![CDATA[Demystifying Testing]]> <![CDATA[How to get from aimlessly testing or not testing at all to really understanding how and what to test.]]> 2018-10-11 https://kentcdodds.com/blog/demystifying-testing https://kentcdodds.com/blog/demystifying-testing <![CDATA[Confidently Shipping Code]]> <![CDATA[Why I care about testing]]> 2018-10-08 https://kentcdodds.com/blog/confidently-shipping-code https://kentcdodds.com/blog/confidently-shipping-code <![CDATA[React/JSX as a server-side templating language]]> <![CDATA[Using React function components to render your website's skeleton index.html]]> 2018-10-01 https://kentcdodds.com/blog/react-jsx-as-a-server-side-templating-language https://kentcdodds.com/blog/react-jsx-as-a-server-side-templating-language <![CDATA[How I am so productive]]> <![CDATA[People regularly ask me how I get so much done. Here's my secret...]]> 2018-09-24 https://kentcdodds.com/blog/how-i-am-so-productive https://kentcdodds.com/blog/how-i-am-so-productive <![CDATA[Getting Noticed and Widening Your Reach]]> <![CDATA[Some things you can do to gain a wider audience and get your stuff noticed]]> 2018-09-17 https://kentcdodds.com/blog/getting-noticed-and-widening-your-reach https://kentcdodds.com/blog/getting-noticed-and-widening-your-reach <![CDATA[Make Impossible States Impossible]]> <![CDATA[A simple trick to simplify your application and component state]]> 2018-09-10 https://kentcdodds.com/blog/make-impossible-states-impossible https://kentcdodds.com/blog/make-impossible-states-impossible <![CDATA[How to make the most out of conferences]]> <![CDATA[Some specific things you can do as a conference attendee]]> 2018-09-03 https://kentcdodds.com/blog/how-to-make-the-most-out-of-conferences https://kentcdodds.com/blog/how-to-make-the-most-out-of-conferences <![CDATA[Why and How I started public speaking]]> <![CDATA[Some stories and some advice from an international speaker and trainer]]> 2018-08-27 https://kentcdodds.com/blog/why-and-how-i-started-public-speaking https://kentcdodds.com/blog/why-and-how-i-started-public-speaking <![CDATA[mdx-deck: slide decks powered by markdown and react]]> <![CDATA[Why it's awesome, what it is, how it works, and how to use mdx-deck.]]> 2018-08-20 https://kentcdodds.com/blog/mdx-deck-slide-decks-powered-by-markdown-and-react https://kentcdodds.com/blog/mdx-deck-slide-decks-powered-by-markdown-and-react <![CDATA[unpkg: An open source CDN for npm]]> <![CDATA[Let's learn how unpkg the service and the open source project can improve performance for your company's apps.]]> 2018-08-13 https://kentcdodds.com/blog/unpkg-an-open-source-cdn-for-npm https://kentcdodds.com/blog/unpkg-an-open-source-cdn-for-npm <![CDATA[Polyfill as needed with polyfill-service]]> <![CDATA[How to maximize the performance of loading polyfills for your application users.]]> 2018-08-06 https://kentcdodds.com/blog/polyfill-as-needed-with-polyfill-service https://kentcdodds.com/blog/polyfill-as-needed-with-polyfill-service <![CDATA[What is a polyfill]]> <![CDATA[The difference between a polyfill and a code transform.]]> 2018-07-30 https://kentcdodds.com/blog/what-is-a-polyfill https://kentcdodds.com/blog/what-is-a-polyfill <![CDATA[Why I Never Use Shallow Rendering]]> <![CDATA[Tests should help me be confident that my application is working and there are better ways to do that than shallow rendering.]]> 2018-07-23 https://kentcdodds.com/blog/why-i-never-use-shallow-rendering https://kentcdodds.com/blog/why-i-never-use-shallow-rendering <![CDATA[What is JSX?]]> <![CDATA[You may use it every day, but have you seen what happens after Babel compiles it?]]> 2018-07-09 https://kentcdodds.com/blog/what-is-jsx https://kentcdodds.com/blog/what-is-jsx <![CDATA[Test Isolation with React]]> <![CDATA[Why your tests should be completely isolated from one another and how to do that.]]> 2018-07-02 https://kentcdodds.com/blog/test-isolation-with-react https://kentcdodds.com/blog/test-isolation-with-react <![CDATA[JavaScript default parameters]]> <![CDATA[The expressive power of expressions in default values for parameters]]> 2018-06-25 https://kentcdodds.com/blog/javascript-default-parameters https://kentcdodds.com/blog/javascript-default-parameters <![CDATA[Dealing with FOMO]]> <![CDATA[What is "Fear Of Missing Out" and how to deal with this natural unhealthy tendency.]]> 2018-06-18 https://kentcdodds.com/blog/dealing-with-fomo https://kentcdodds.com/blog/dealing-with-fomo <![CDATA[🏎 downshift 2.0.0 released 🎉]]> <![CDATA[Even better accessibility, React Native and ReasonReact support, even simpler API, improved docs, new examples site, Flow and TypeScript...]]> 2018-06-15 https://kentcdodds.com/blog/downshift-2-0-0-released https://kentcdodds.com/blog/downshift-2-0-0-released <![CDATA[When to use Control Props or State Reducers]]> <![CDATA[Comparing two similar patterns that enable many of the same use cases.]]> 2018-06-11 https://kentcdodds.com/blog/control-props-vs-state-reducers https://kentcdodds.com/blog/control-props-vs-state-reducers <![CDATA[Write your own code transform for fun and profit]]> <![CDATA[How to write your own code macro with babel-plugin-macros 🎣]]> 2018-06-04 https://kentcdodds.com/blog/write-your-own-code-transform https://kentcdodds.com/blog/write-your-own-code-transform <![CDATA[💯 UPDATED: Advanced React Component Patterns ⚛️]]> <![CDATA[Now featuring the latest React APIs (like context) and entirely new patterns (like state reducer props).]]> 2018-06-01 https://kentcdodds.com/blog/updated-advanced-react-component-patterns https://kentcdodds.com/blog/updated-advanced-react-component-patterns <![CDATA[React DevTools]]> <![CDATA[A quick demo of the browser extension you should definitely be using.]]> 2018-05-28 https://kentcdodds.com/blog/react-devtools https://kentcdodds.com/blog/react-devtools <![CDATA[Prop Drilling]]> <![CDATA[What it is, why it's good, why it's bad, and how to avoid common problems with it]]> 2018-05-21 https://kentcdodds.com/blog/prop-drilling https://kentcdodds.com/blog/prop-drilling <![CDATA[How I learn an Open Source Codebase]]> <![CDATA[What I do to learn and understand an open source project to which I want to contribute.]]> 2018-05-14 https://kentcdodds.com/blog/how-i-learn-an-open-source-codebase https://kentcdodds.com/blog/how-i-learn-an-open-source-codebase <![CDATA[Mixing Component Patterns]]> <![CDATA[Let's make a component that supports Render Props, Component Injection, Compound Components, the Provider Pattern, and Higher Order...]]> 2018-05-07 https://kentcdodds.com/blog/mixing-component-patterns https://kentcdodds.com/blog/mixing-component-patterns <![CDATA[Pure Modules]]> <![CDATA[How you write your ES Modules impacts the performance and maintainability of your code.]]> 2018-04-30 https://kentcdodds.com/blog/pure-modules https://kentcdodds.com/blog/pure-modules <![CDATA[Migrating to React's New Context API]]> <![CDATA[Let's compare the before/after of React's new context API.]]> 2018-04-23 https://kentcdodds.com/blog/migrating-to-reacts-new-context-api https://kentcdodds.com/blog/migrating-to-reacts-new-context-api <![CDATA[Compose Render Props]]> <![CDATA[One of the reasons I'm so excited about render props]]> 2018-04-09 https://kentcdodds.com/blog/compose-render-props https://kentcdodds.com/blog/compose-render-props <![CDATA[Introducing the react-testing-library 🐐]]> <![CDATA[A simpler replacement for enzyme that encourages good testing practices.]]> 2018-04-02 https://kentcdodds.com/blog/introducing-the-react-testing-library https://kentcdodds.com/blog/introducing-the-react-testing-library <![CDATA[When to NOT use Render Props]]> <![CDATA[Let's back up from the hype and think critically about the render props pattern]]> 2018-03-26 https://kentcdodds.com/blog/when-to-not-use-render-props https://kentcdodds.com/blog/when-to-not-use-render-props <![CDATA[But really, what is a JavaScript mock?]]> <![CDATA[Let's take a step back and understand what mocks are and how to use them to facilitate testing in JavaScript.]]> 2018-03-19 https://kentcdodds.com/blog/but-really-what-is-a-javascript-mock https://kentcdodds.com/blog/but-really-what-is-a-javascript-mock <![CDATA[Increase your marketability]]> <![CDATA[Some tips of things that I've done that have helped me get where I want to be in the industry.]]> 2018-03-12 https://kentcdodds.com/blog/increase-your-marketability https://kentcdodds.com/blog/increase-your-marketability <![CDATA[Solidifying what you learn]]> <![CDATA[Teaching is nature's way of letting you know how sloppy your understanding is.]]> 2018-03-05 https://kentcdodds.com/blog/solidifying-what-you-learn https://kentcdodds.com/blog/solidifying-what-you-learn <![CDATA[The state reducer pattern ⚛️ 🏎]]> <![CDATA[A new pattern has been implemented in downshift and it's awesome. Use the state reducer pattern to make your components more useful.]]> 2018-02-19 https://kentcdodds.com/blog/the-state-reducer-pattern https://kentcdodds.com/blog/the-state-reducer-pattern <![CDATA[Answers to common questions about render props]]> <![CDATA[Because there's a ton of hype, and a bunch of questions ⚛️]]> 2018-02-12 https://kentcdodds.com/blog/answers-to-common-questions-about-render-props https://kentcdodds.com/blog/answers-to-common-questions-about-render-props <![CDATA[React's ⚛️ new Context API]]> <![CDATA[It's way more ergonomic, it's no longer "experimental," and it's now a first-class API! OH, AND IT USES A RENDER PROP!]]> 2018-02-05 https://kentcdodds.com/blog/reacts-new-context-api https://kentcdodds.com/blog/reacts-new-context-api <![CDATA[Concerning toolkits 🛠 📦]]> <![CDATA[The merits and use cases of consolidating tools into one "zero config" toolkit.]]> 2018-01-29 https://kentcdodds.com/blog/concerning-toolkits https://kentcdodds.com/blog/concerning-toolkits <![CDATA[Spelunking in node_modules 👷]]> <![CDATA[Deep dive into Jest, React, and jsdom: A story about how I go about finding and fixing bugs in my dependencies.]]> 2018-01-22 https://kentcdodds.com/blog/spelunking-in-node-modules https://kentcdodds.com/blog/spelunking-in-node-modules <![CDATA[Building Production Apps 100% in the browser]]> <![CDATA[How I built & deployed 2 production apps without downloading any source code.]]> 2018-01-15 https://kentcdodds.com/blog/building-production-apps-100-in-the-browser https://kentcdodds.com/blog/building-production-apps-100-in-the-browser <![CDATA[Testing ⚛️ components using render props]]> <![CDATA[Let's look at how we can write tests for React components that use render props!]]> 2018-01-08 https://kentcdodds.com/blog/testing-components-using-render-props https://kentcdodds.com/blog/testing-components-using-render-props <![CDATA[But really, what is a JavaScript test?]]> <![CDATA[Let's take a step back and understand automated testing of JavaScript from square one.]]> 2018-01-01 https://kentcdodds.com/blog/but-really-what-is-a-javascript-test https://kentcdodds.com/blog/but-really-what-is-a-javascript-test <![CDATA[Merry Christmas!]]> <![CDATA[As I write this, it's Christmas Eve. My kids have fallen asleep and I've wrapped up the last few presents I've made or purchased for them...]]> 2017-12-25 https://kentcdodds.com/blog/merry-christmas https://kentcdodds.com/blog/merry-christmas <![CDATA[The Beginner's Guide to ReactJS]]> <![CDATA[The course is free forever on egghead.io! Let's talk about how it teaches even developers experienced with React ⚛️]]> 2017-12-18 https://kentcdodds.com/blog/the-beginners-guide-to-reactjs https://kentcdodds.com/blog/the-beginners-guide-to-reactjs <![CDATA[Giving good demos]]> <![CDATA[I gave a pretty good demo and here are some things I did that might help you give good demos too.]]> 2017-12-11 https://kentcdodds.com/blog/giving-good-demos https://kentcdodds.com/blog/giving-good-demos <![CDATA[Advanced React Component Patterns]]> <![CDATA[An overview of some of the patterns covered in my recently released egghead.io course (free until Friday).]]> 2017-12-05 https://kentcdodds.com/blog/advanced-react-component-patterns https://kentcdodds.com/blog/advanced-react-component-patterns <![CDATA[Learn React Fundamentals 🆓 and Advanced Patterns ⚛️ 🎁]]> <![CDATA[Two and a half hours of new beginner (free) and advanced React material are now available egghead.io!]]> 2017-12-04 https://kentcdodds.com/blog/learn-react-fundamentals-and-advanced-patterns https://kentcdodds.com/blog/learn-react-fundamentals-and-advanced-patterns <![CDATA[Becoming an Open Source Project Maintainer]]> <![CDATA[Some tips and tricks that have worked for me.]]> 2017-11-20 https://kentcdodds.com/blog/becoming-an-open-source-project-maintainer https://kentcdodds.com/blog/becoming-an-open-source-project-maintainer <![CDATA[Rendering a function with React]]> <![CDATA[How I tricked React into rendering a function (not call it... render it)]]> 2017-11-13 https://kentcdodds.com/blog/rendering-a-function-with-react https://kentcdodds.com/blog/rendering-a-function-with-react <![CDATA[Improving the usability of your modules]]> <![CDATA[How to make your modules more generically useful and easier to test.]]> 2017-11-06 https://kentcdodds.com/blog/improving-the-usability-of-your-modules https://kentcdodds.com/blog/improving-the-usability-of-your-modules <![CDATA[Effective Snapshot Testing]]> <![CDATA[Snapshot testing can be useless, or super useful. Your choice. Let's talk about how to make them useful.]]> 2017-10-30 https://kentcdodds.com/blog/effective-snapshot-testing https://kentcdodds.com/blog/effective-snapshot-testing <![CDATA[Make maintainable workarounds with codegen 💥]]> <![CDATA[Sometimes you need to workaround issues in other libraries. These workarounds can often lead to messy code. codegen is a tool that helps...]]> 2017-10-09 https://kentcdodds.com/blog/make-maintainable-workarounds-with-codegen https://kentcdodds.com/blog/make-maintainable-workarounds-with-codegen <![CDATA[How to give rendering control to users with prop getters]]> <![CDATA[Render props are awesome, put it together with prop getters and you have an awesome combination to give users of your React components...]]> 2017-10-02 https://kentcdodds.com/blog/how-to-give-rendering-control-to-users-with-prop-getters https://kentcdodds.com/blog/how-to-give-rendering-control-to-users-with-prop-getters <![CDATA[Tools without config 🛠📦]]> <![CDATA[TL;DR/Spoiler alert: I'm working on a tool at PayPal called paypal-scripts and a personal one called kcd-scripts. You should try it too!]]> 2017-09-26 https://kentcdodds.com/blog/tools-without-config https://kentcdodds.com/blog/tools-without-config <![CDATA[Introducing downshift 🏎 for React ⚛️]]> <![CDATA[downshift 🏎 is the primitive you need to build simple, flexible, WAI-ARIA compliant React...]]> 2017-08-23 https://kentcdodds.com/blog/introducing-downshift-for-react https://kentcdodds.com/blog/introducing-downshift-for-react <![CDATA[How writing custom Babel & ESLint plugins can increase productivity & improve user experience]]> <![CDATA[And it's way more approachable than you think...]]> 2017-07-17 https://kentcdodds.com/blog/how-writing-custom-babel-and-eslint-plugins-can-increase-productivity-and-improve-user-experience https://kentcdodds.com/blog/how-writing-custom-babel-and-eslint-plugins-can-increase-productivity-and-improve-user-experience <![CDATA[Classes, Complexity, and Functional Programming]]> <![CDATA[When I use classes, when I don't, what I do instead, and why]]> 2017-06-06 https://kentcdodds.com/blog/classes-complexity-and-functional-programming https://kentcdodds.com/blog/classes-complexity-and-functional-programming <![CDATA[Introducing glamorous 💄]]> <![CDATA[A styled-components 💅 and jsxstyle inspired solution for styling ⚛️ React Components from PayPal]]> 2017-04-04 https://kentcdodds.com/blog/introducing-glamorous https://kentcdodds.com/blog/introducing-glamorous <![CDATA[Tips for making a CLI-based tool with node]]> <![CDATA[I got this question on my AMA and decided to turn the answer into a formal blogpost.]]> 2016-11-18 https://kentcdodds.com/blog/tips-for-making-a-cli-based-tool-with-node https://kentcdodds.com/blog/tips-for-making-a-cli-based-tool-with-node <![CDATA[Migrating to Jest]]> <![CDATA[on the P2P team at PayPal]]> 2016-11-14 https://kentcdodds.com/blog/migrating-to-jest https://kentcdodds.com/blog/migrating-to-jest <![CDATA[🌆 Sunsetting JavaScript Air 🌆]]> <![CDATA[for now... 🌇]]> 2016-10-28 https://kentcdodds.com/blog/sunsetting-javascript-air https://kentcdodds.com/blog/sunsetting-javascript-air <![CDATA[Kent OOO (Out Of the Office)]]> <![CDATA[Why this week's episode of JavaScript Air is canceled and where I'm going...]]> 2016-05-31 https://kentcdodds.com/blog/kent-ooo-out-of-the-office https://kentcdodds.com/blog/kent-ooo-out-of-the-office <![CDATA[Introducing: How to Contribute to Open Source]]> <![CDATA[My free, first-timer friendly egghead.io series all about how to contribute to open source projects on GitHub.]]> 2016-02-08 https://kentcdodds.com/blog/introducing-how-to-contribute-to-open-source https://kentcdodds.com/blog/introducing-how-to-contribute-to-open-source <![CDATA[Misunderstanding ES6 Modules, Upgrading Babel, Tears, and a Solution]]> <![CDATA[On October 29th, 2015, Sebastian McKenzie, James Kyle, and the rest of the Babel team dropped a huge major release for frontend developers...]]> 2015-12-23 https://kentcdodds.com/blog/misunderstanding-es6-modules-upgrading-babel-tears-and-a-solution https://kentcdodds.com/blog/misunderstanding-es6-modules-upgrading-babel-tears-and-a-solution <![CDATA[Semicolons in JavaScript: A preference]]> <![CDATA[An argument for why use of semicolons in JavaScript source is a preference]]> 2015-11-16 https://kentcdodds.com/blog/semicolons-in-javascript-a-preference https://kentcdodds.com/blog/semicolons-in-javascript-a-preference <![CDATA[Please, don't commit commented out code]]> <![CDATA[Some solid reasons you should delete code that is not used]]> 2015-10-27 https://kentcdodds.com/blog/please-dont-commit-commented-out-code https://kentcdodds.com/blog/please-dont-commit-commented-out-code <![CDATA[Open Source Stamina]]> <![CDATA[You contribute best to something you use regularly.]]> 2015-10-22 https://kentcdodds.com/blog/open-source-stamina https://kentcdodds.com/blog/open-source-stamina <![CDATA[Why I don't commit generated files to master]]> <![CDATA[for libraries...]]> 2015-10-05 https://kentcdodds.com/blog/why-i-dont-commit-generated-files-to-master https://kentcdodds.com/blog/why-i-dont-commit-generated-files-to-master <![CDATA[How to Write a JavaScript Library]]> <![CDATA[There are so many reasons to open source your code. But knowing how to do it can be a real challenge.]]> 2015-09-08 https://kentcdodds.com/blog/how-to-write-a-javascript-library https://kentcdodds.com/blog/how-to-write-a-javascript-library <![CDATA[First Timers Only]]> <![CDATA[A suggestion to Open Source project maintainers...]]> 2015-08-04 https://kentcdodds.com/blog/first-timers-only https://kentcdodds.com/blog/first-timers-only <![CDATA[Newspaper Code Structure]]> <![CDATA[Your code should read like a newspaper article. Important stuff at the top, details at the bottom. I have a particular convention for my...]]> 2015-05-18 https://kentcdodds.com/blog/newspaper-code-structure https://kentcdodds.com/blog/newspaper-code-structure