41554 blogs ยท [ { "id": "01a0d94c-d9cb-730a-8cc7-34807cb3f2e1", "title": "You Own the Outcome: Product Engineering in the Age of AI", "url": "https://kentcdodds.com/blog/you-own-the-outcome", "published_at": "2026-09-24T00:00:00+00:00" }, { "id": "01a08217-6255-7131-ae9f-59e23e35a05c", "title": "Introducing Kody: Your Personal Software Factory", "url": "https://kentcdodds.com/blog/introducing-kody-your-personal-software-factory", "published_at": "2026-09-08T00:00:00+00:00" }, { "id": "01a07d5d-7935-715f-aeee-643b84ea1565", "title": "Implementing Hybrid Semantic + Lexical Search", "url": "https://kentcdodds.com/blog/implementing-hybrid-semantic-lexical-search", "published_at": "2026-03-16T00:00:00+00:00" }, { "id": "01a07d5d-7935-715f-aeee-643b85505821", "title": "Simplifying Containers with Cloudflare Sandboxes", "url": "https://kentcdodds.com/blog/simplifying-containers-with-cloudflare-sandboxes", "published_at": "2026-03-11T00:00:00+00:00" }, { "id": "01a07d5d-7935-715f-aeee-643b85de6163", "title": "Migrating to Workspaces and Nx", "url": "https://kentcdodds.com/blog/migrating-to-workspaces-and-nx", "published_at": "2026-03-10T00:00:00+00:00" }, { "id": "01a07d5d-7935-715f-aeee-643b86cb5409", "title": "Offloading FFmpeg with Cloudflare", "url": "https://kentcdodds.com/blog/offloading-ffmpeg-with-cloudflare", "published_at": "2026-03-09T00:00:00+00:00" }, { "id": "01a07d5d-7935-715f-aeee-643b87c4c1b5", "title": "Building Semantic Search on my Content", "url": "https://kentcdodds.com/blog/building-semantic-search-on-my-content", "published_at": "2026-02-24T00:00:00+00:00" }, { "id": "01a07d5d-7935-715f-aeee-643b88af8aa8", "title": "Helping YOU ask ME questions with AI", "url": "https://kentcdodds.com/blog/helping-you-ask-me-questions-with-ai", "published_at": "2026-02-24T00:00:00+00:00" }, { "id": "01a07d5d-7935-715f-aeee-643b8992e71c", "title": "How I used Cursor to Migrate Frameworks", "url": "https://kentcdodds.com/blog/how-i-used-cursor-to-migrate-frameworks", "published_at": "2026-02-20T00:00:00+00:00" }, { "id": "01a07d5d-7935-715f-aeee-643b89e2dce8", "title": "The Dow's Start on the Covenant Path", "url": "https://kentcdodds.com/blog/the-dows-start-on-the-covenant-path", "published_at": "2026-01-05T00:00:00+00:00" }, { "id": "01a07d5d-7935-715f-aeee-643b8a2141e2", "title": "2025 in Review", "url": "https://kentcdodds.com/blog/2025-in-review", "published_at": "2025-12-31T00:00:00+00:00" }, { "id": "01a07d5d-7935-715f-aeee-643b8a2d298d", "title": "The next chapter: EpicAI.pro", "url": "https://kentcdodds.com/blog/the-next-chapter-epicai-pro", "published_at": "2025-04-10T00:00:00+00:00" }, { "id": "01a07d5d-7935-715f-aeee-643b8a55135f", "title": "AI is taking your job", "url": "https://kentcdodds.com/blog/ai-is-taking-your-job", "published_at": "2024-11-21T00:00:00+00:00" }, { "id": "01a07d5d-7935-715f-aeee-643b8a61c217", "title": "How I increased my visibility", "url": "https://kentcdodds.com/blog/how-i-increased-my-visibility", "published_at": "2024-10-29T00:00:00+00:00" }, { "id": "01a07d5d-7935-715f-aeee-643b8b43a6f9", "title": "2023 in Review", "url": "https://kentcdodds.com/blog/2023-in-review", "published_at": "2023-12-20T00:00:00+00:00" }, { "id": "01a07d5d-7935-715f-aeee-643b8b4b5488", "title": "Launching Epic Web", "url": "https://kentcdodds.com/blog/launching-epic-web", "published_at": "2023-12-20T00:00:00+00:00" }, { "id": "01a07d5d-7935-715f-aeee-643b8c17a6d4", "title": "Stop Being a Junior", "url": "https://kentcdodds.com/blog/stop-being-a-junior", "published_at": "2023-05-30T00:00:00+00:00" }, { "id": "01a07d5d-7935-715f-aeee-643b8c1fff8a", "title": "RSC with Dan Abramov and Joe Savona Live Stream", "url": "https://kentcdodds.com/blog/rsc-with-dan-abramov-and-joe-savona-live-stream", "published_at": "2023-03-14T00:00:00+00:00" }, { "id": "01a07d5d-7935-715f-aeee-643b8ccfcad4", "title": "Fixing a Memory Leak in a Production Node.js App", "url": "https://kentcdodds.com/blog/fixing-a-memory-leak-in-a-production-node-js-app", "published_at": "2023-01-12T00:00:00+00:00" }, { "id": "01a07d5d-7935-715f-aeee-643b8d51c4aa", "title": "2022 in Review", "url": "https://kentcdodds.com/blog/2022-in-review", "published_at": "2022-12-29T00:00:00+00:00" }, { "id": "01a07d5d-7935-715f-aeee-643b8dae59d4", "title": "My Car Accident", "url": "https://kentcdodds.com/blog/my-car-accident", "published_at": "2022-12-29T00:00:00+00:00" }, { "id": "01a07d5d-7935-715f-aeee-643b8e950cb8", "title": "I Migrated from a Postgres Cluster to Distributed SQLite with LiteFS", "url": "https://kentcdodds.com/blog/i-migrated-from-a-postgres-cluster-to-distributed-sqlite-with-litefs", "published_at": "2022-11-21T00:00:00+00:00" }, { "id": "01a07d5d-7935-715f-aeee-643b8ebff0dd", "title": "I'm building EpicWeb.dev", "url": "https://kentcdodds.com/blog/i-m-building-epicweb-dev", "published_at": "2022-09-07T00:00:00+00:00" }, { "id": "01a07d5d-7935-715f-aeee-643b8f2c8792", "title": "A review of my time at Remix", "url": "https://kentcdodds.com/blog/a-review-of-my-time-at-remix", "published_at": "2022-09-06T00:00:00+00:00" }, { "id": "01a07d5d-7935-715f-aeee-643b8fdabbb8", "title": "Remix: The Yang to React's Yin", "url": "https://kentcdodds.com/blog/remix-the-yang-to-react-s-yin", "published_at": "2022-03-24T00:00:00+00:00" }, { "id": "01a07d5d-7935-715f-aeee-643b906e5f9d", "title": "How I help you build better websites", "url": "https://kentcdodds.com/blog/how-i-help-you-build-better-websites", "published_at": "2021-11-15T00:00:00+00:00" }, { "id": "01a07d5d-7935-715f-aeee-643b90859aee", "title": "Why I Love Remix", "url": "https://kentcdodds.com/blog/why-i-love-remix", "published_at": "2021-11-13T00:00:00+00:00" }, { "id": "01a07d5d-7935-715f-aeee-643b90d9931e", "title": "The State Initializer Pattern", "url": "https://kentcdodds.com/blog/the-state-initializer-pattern", "published_at": "2021-11-05T00:00:00+00:00" }, { "id": "01a07d5d-7935-715f-aeee-643b917eca33", "title": "How to React โš›๏ธ", "url": "https://kentcdodds.com/blog/how-to-react", "published_at": "2021-11-03T00:00:00+00:00" }, { "id": "01a07d5d-7935-715f-aeee-643b91dc8935", "title": "Get a catch block error message with TypeScript", "url": "https://kentcdodds.com/blog/get-a-catch-block-error-message-with-typescript", "published_at": "2021-10-28T00:00:00+00:00" }, { "id": "01a07d5d-7935-715f-aeee-643b928ca503", "title": "Building an awesome image loading experience", "url": "https://kentcdodds.com/blog/building-an-awesome-image-loading-experience", "published_at": "2021-10-19T00:00:00+00:00" }, { "id": "01a07d5d-7935-715f-aeee-643b932c7309", "title": "How Remix makes CSS clashes predictable", "url": "https://kentcdodds.com/blog/how-remix-makes-css-clashes-predictable", "published_at": "2021-10-13T00:00:00+00:00" }, { "id": "01a07d5d-7935-715f-aeee-643b939ffb9b", "title": "Introducing the new kentcdodds.com", "url": "https://kentcdodds.com/blog/introducing-the-new-kentcdodds.com", "published_at": "2021-10-04T00:00:00+00:00" }, { "id": "01a07d5d-7935-715f-aeee-643b93b586fb", "title": "How I built a modern website in 2021", "url": "https://kentcdodds.com/blog/how-i-built-a-modern-website-in-2021", "published_at": "2021-09-29T00:00:00+00:00" }, { "id": "01a07d5d-7935-715f-aeee-643b94479da5", "title": "How to use React Context effectively", "url": "https://kentcdodds.com/blog/how-to-use-react-context-effectively", "published_at": "2021-06-05T00:00:00+00:00" }, { "id": "01a07d5d-7935-715f-aeee-643b948b50c5", "title": "Static vs Unit vs Integration vs E2E Testing for Frontend Apps", "url": "https://kentcdodds.com/blog/static-vs-unit-vs-integration-vs-e2e-tests", "published_at": "2021-06-03T00:00:00+00:00" }, { "id": "01a07d5d-7935-715f-aeee-643b94d0a51b", "title": "The Testing Trophy and Testing Classifications", "url": "https://kentcdodds.com/blog/the-testing-trophy-and-testing-classifications", "published_at": "2021-06-03T00:00:00+00:00" }, { "id": "01a07d5d-7935-715f-aeee-643b95bfc7df", "title": "Array reduce vs chaining vs for loop", "url": "https://kentcdodds.com/blog/array-reduce-vs-chaining-vs-for-loop", "published_at": "2021-05-24T00:00:00+00:00" }, { "id": "01a07d5d-7935-715f-aeee-643b96a0d0fe", "title": "Don't Solve Problems, Eliminate Them", "url": "https://kentcdodds.com/blog/don-t-solve-problems-eliminate-them", "published_at": "2021-05-11T00:00:00+00:00" }, { "id": "01a07d5d-7935-715f-aeee-643b96ed0dd2", "title": "Super Simple Start to Remix", "url": "https://kentcdodds.com/blog/super-simple-start-to-remix", "published_at": "2021-05-03T00:00:00+00:00" }, { "id": "01a07d5d-7935-715f-aeee-643b97c821cb", "title": "Super Simple Start to ESModules in Node.js", "url": "https://kentcdodds.com/blog/super-simple-start-to-es-modules-in-node-js", "published_at": "2021-04-08T00:00:00+00:00" }, { "id": "01a07d5d-7935-715f-aeee-643b984e9e70", "title": "JavaScript Pass By Value Function Parameters", "url": "https://kentcdodds.com/blog/javascript-pass-by-value-function-parameters", "published_at": "2021-03-23T00:00:00+00:00" }, { "id": "01a07d5d-7935-715f-aeee-643b988e17a3", "title": "How to write a Constrained Identity Function (CIF) in TypeScript", "url": "https://kentcdodds.com/blog/how-to-write-a-constrained-identity-function-in-typescript", "published_at": "2021-03-09T00:00:00+00:00" }, { "id": "01a07d5d-7935-715f-aeee-643b98f3bc4d", "title": "How to optimize your context value", "url": "https://kentcdodds.com/blog/how-to-optimize-your-context-value", "published_at": "2021-03-08T00:00:00+00:00" }, { "id": "01a07d5d-7935-715f-aeee-643b999c30d7", "title": "How to write a React Component in TypeScript", "url": "https://kentcdodds.com/blog/how-to-write-a-react-component-in-typescript", "published_at": "2021-03-04T00:00:00+00:00" }, { "id": "01a07d5d-7935-715f-aeee-643b9a6a3659", "title": "TypeScript Function Syntaxes", "url": "https://kentcdodds.com/blog/typescript-function-syntaxes", "published_at": "2021-02-25T00:00:00+00:00" }, { "id": "01a07d5d-7935-715f-aeee-643b9b371259", "title": "Listify a JavaScript Array", "url": "https://kentcdodds.com/blog/listify-a-java-script-array", "published_at": "2021-02-18T00:00:00+00:00" }, { "id": "01a07d5d-7935-715f-aeee-643b9c0e10a9", "title": "Build vs Buy: Component Libraries edition", "url": "https://kentcdodds.com/blog/build-vs-buy-component-libraries-edition", "published_at": "2021-02-04T00:00:00+00:00" }, { "id": "01a07d5d-7935-715f-aeee-643b9cfcaaa6", "title": "Using fetch with TypeScript", "url": "https://kentcdodds.com/blog/using-fetch-with-type-script", "published_at": "2021-01-26T00:00:00+00:00" }, { "id": "01a07d5d-7935-715f-aeee-643b9de8213d", "title": "Wrapping React.useState with TypeScript", "url": "https://kentcdodds.com/blog/wrapping-react-use-state-with-type-script", "published_at": "2021-01-19T00:00:00+00:00" }, { "id": "01a07d5d-7935-715f-aeee-643b9deb5821", "title": "Define function overload types with TypeScript", "url": "https://kentcdodds.com/blog/define-function-overload-types-with-type-script", "published_at": "2021-01-12T00:00:00+00:00" }, { "id": "01a07d5d-7935-715f-aeee-643b9e14ed41", "title": "2020 in Review", "url": "https://kentcdodds.com/blog/2020-in-review", "published_at": "2021-01-04T00:00:00+00:00" }, { "id": "01a07d5d-7935-715f-aeee-643b9ed6ab46", "title": "Business and Engineering alignment", "url": "https://kentcdodds.com/blog/business-and-engineering-alignment", "published_at": "2020-12-10T00:00:00+00:00" }, { "id": "01a07d5d-7935-715f-aeee-643b9f99661c", "title": "Hi, thanks for reaching out to me ๐Ÿ‘‹", "url": "https://kentcdodds.com/blog/hi-thanks-for-reaching-out-to-me", "published_at": "2020-12-02T00:00:00+00:00" }, { "id": "01a07d5d-7935-715f-aeee-643ba03cca99", "title": "useEffect vs useLayoutEffect", "url": "https://kentcdodds.com/blog/useeffect-vs-uselayouteffect", "published_at": "2020-12-01T00:00:00+00:00" }, { "id": "01a07d5d-7935-715f-aeee-643ba0658f92", "title": "Super simple start to Firebase functions", "url": "https://kentcdodds.com/blog/super-simple-start-to-firebase-functions", "published_at": "2020-11-12T00:00:00+00:00" }, { "id": "01a07d5d-7935-715f-aeee-643ba072e971", "title": "Super simple start to Netlify functions", "url": "https://kentcdodds.com/blog/super-simple-start-to-netlify-functions", "published_at": "2020-11-11T00:00:00+00:00" }, { "id": "01a07d5d-7935-715f-aeee-643ba086050f", "title": "Super Simple Start to css variables", "url": "https://kentcdodds.com/blog/super-simple-start-to-css-variables", "published_at": "2020-10-28T00:00:00+00:00" }, { "id": "01a07d5d-7935-715f-aeee-643ba0b15045", "title": "Favor Progress Over Pride in Open Source", "url": "https://kentcdodds.com/blog/favor-progress-over-pride-in-open-source", "published_at": "2020-08-24T00:00:00+00:00" }, { "id": "01a07d5d-7935-715f-aeee-643ba113be10", "title": "Testing Implementation Details", "url": "https://kentcdodds.com/blog/testing-implementation-details", "published_at": "2020-08-17T00:00:00+00:00" }, { "id": "01a07d5d-7935-715f-aeee-643ba1e3e50d", "title": "How getting into Open Source has been awesome for me", "url": "https://kentcdodds.com/blog/how-getting-into-open-source-has-been-awesome-for-me", "published_at": "2020-08-10T00:00:00+00:00" }, { "id": "01a07d5d-7935-715f-aeee-643ba2ce30d4", "title": "useState lazy initialization and function updates", "url": "https://kentcdodds.com/blog/use-state-lazy-initialization-and-function-updates", "published_at": "2020-08-03T00:00:00+00:00" }, { "id": "01a07d5d-7935-715f-aeee-643ba360cb2e", "title": "Use ternaries rather than && in JSX", "url": "https://kentcdodds.com/blog/use-ternaries-rather-than-and-and-in-jsx", "published_at": "2020-07-27T00:00:00+00:00" }, { "id": "01a07d5d-7935-715f-aeee-643ba43841bd", "title": "Application State Management with React", "url": "https://kentcdodds.com/blog/application-state-management-with-react", "published_at": "2020-07-21T00:00:00+00:00" }, { "id": "01a07d5d-7935-715f-aeee-643ba49e6873", "title": "Use react-error-boundary to handle errors in React", "url": "https://kentcdodds.com/blog/use-react-error-boundary-to-handle-errors-in-react", "published_at": "2020-07-20T00:00:00+00:00" }, { "id": "01a07d5d-7935-715f-aeee-643ba4c447cd", "title": "JavaScript to Know for React", "url": "https://kentcdodds.com/blog/javascript-to-know-for-react", "published_at": "2020-07-15T00:00:00+00:00" }, { "id": "01a07d5d-7935-715f-aeee-643ba52b2ce6", "title": "How I structure Express apps", "url": "https://kentcdodds.com/blog/how-i-structure-express-apps", "published_at": "2020-07-13T00:00:00+00:00" }, { "id": "01a07d5d-7935-715f-aeee-643ba54fc469", "title": "What open source project should I contribute to?", "url": "https://kentcdodds.com/blog/what-open-source-project-should-i-contribute-to", "published_at": "2020-07-06T00:00:00+00:00" }, { "id": "01a07d5d-7935-715f-aeee-643ba5ffafa7", "title": "When I follow TDD", "url": "https://kentcdodds.com/blog/when-i-follow-tdd", "published_at": "2020-06-29T00:00:00+00:00" }, { "id": "01a07d5d-7935-715f-aeee-643ba615a30e", "title": "AHA Programming ๐Ÿ’ก", "url": "https://kentcdodds.com/blog/aha-programming", "published_at": "2020-06-22T00:00:00+00:00" }, { "id": "01a07d5d-7935-715f-aeee-643ba68db8c3", "title": "How I Record Educational Videos", "url": "https://kentcdodds.com/blog/how-i-record-educational-videos", "published_at": "2020-06-22T00:00:00+00:00" }, { "id": "01a07d5d-7935-715f-aeee-643ba7059351", "title": "Should I write a test or fix a bug?", "url": "https://kentcdodds.com/blog/should-i-write-a-test-or-fix-a-bug", "published_at": "2020-06-15T00:00:00+00:00" }, { "id": "01a07d5d-7935-715f-aeee-643ba7f29b8a", "title": "Stop mocking fetch", "url": "https://kentcdodds.com/blog/stop-mocking-fetch", "published_at": "2020-06-03T00:00:00+00:00" }, { "id": "01a07d5d-7935-715f-aeee-643ba8a51d93", "title": "Intentional Career Building", "url": "https://kentcdodds.com/blog/intentional-career-building", "published_at": "2020-05-26T00:00:00+00:00" }, { "id": "01a07d5d-7935-715f-aeee-643ba9588179", "title": "Improve test error messages of your abstractions", "url": "https://kentcdodds.com/blog/improve-test-error-messages-of-your-abstractions", "published_at": "2020-05-18T00:00:00+00:00" }, { "id": "01a07d5d-7935-715f-aeee-643ba99ad0cc", "title": "Tracing user interactions with React", "url": "https://kentcdodds.com/blog/tracing-user-interactions-with-react", "published_at": "2020-05-08T00:00:00+00:00" }, { "id": "01a07d5d-7935-715f-aeee-643baa0b3600", "title": "Eliminate an entire category of bugs with a few simple tools", "url": "https://kentcdodds.com/blog/eliminate-an-entire-category-of-bugs-with-a-few-simple-tools", "published_at": "2020-05-07T00:00:00+00:00" }, { "id": "01a07d5d-7935-715f-aeee-643bab02fec4", "title": "Common mistakes with React Testing Library", "url": "https://kentcdodds.com/blog/common-mistakes-with-react-testing-library", "published_at": "2020-05-04T00:00:00+00:00" }, { "id": "01a07d5d-7935-715f-aeee-643bab42f097", "title": "Super Simple Start to React", "url": "https://kentcdodds.com/blog/super-simple-start-to-react", "published_at": "2020-04-24T00:00:00+00:00" }, { "id": "01a07d5d-7935-715f-aeee-643babbcb222", "title": "Stop using client-side route redirects", "url": "https://kentcdodds.com/blog/stop-using-client-side-route-redirects", "published_at": "2020-04-13T00:00:00+00:00" }, { "id": "01a07d5d-7935-715f-aeee-643bacb629db", "title": "The State Reducer Pattern with React Hooks", "url": "https://kentcdodds.com/blog/the-state-reducer-pattern-with-react-hooks", "published_at": "2020-04-06T00:00:00+00:00" }, { "id": "01a07d5d-7935-715f-aeee-643bad16fc92", "title": "Function forms", "url": "https://kentcdodds.com/blog/function-forms", "published_at": "2020-04-05T00:00:00+00:00" }, { "id": "01a07d5d-7935-715f-aeee-643bad34c6e7", "title": "Replace axios with a simple custom fetch wrapper", "url": "https://kentcdodds.com/blog/replace-axios-with-a-simple-custom-fetch-wrapper", "published_at": "2020-03-30T00:00:00+00:00" }, { "id": "01a07d5d-7935-715f-aeee-643bad4baed9", "title": "How to test custom React hooks", "url": "https://kentcdodds.com/blog/how-to-test-custom-react-hooks", "published_at": "2020-03-22T00:00:00+00:00" }, { "id": "01a07d5d-7935-715f-aeee-643bad598add", "title": "React Production Performance Monitoring", "url": "https://kentcdodds.com/blog/react-production-performance-monitoring", "published_at": "2020-03-16T00:00:00+00:00" }, { "id": "01a07d5d-7935-715f-aeee-643bae3f6fbf", "title": "Should I useState or useReducer?", "url": "https://kentcdodds.com/blog/should-i-usestate-or-usereducer", "published_at": "2020-03-09T00:00:00+00:00" }, { "id": "01a07d5d-7935-715f-aeee-643bae69bb09", "title": "Stop using isLoading booleans", "url": "https://kentcdodds.com/blog/stop-using-isloading-booleans", "published_at": "2020-03-02T00:00:00+00:00" }, { "id": "01a07d5d-7935-715f-aeee-643baf57e4b9", "title": "Make Your Test Fail", "url": "https://kentcdodds.com/blog/make-your-test-fail", "published_at": "2020-02-24T00:00:00+00:00" }, { "id": "01a07d5d-7935-715f-aeee-643bafa29215", "title": "Make your own DevTools", "url": "https://kentcdodds.com/blog/make-your-own-dev-tools", "published_at": "2020-02-17T00:00:00+00:00" }, { "id": "01a07d5d-7935-715f-aeee-643bafe0fded", "title": "An Argument for Automation", "url": "https://kentcdodds.com/blog/automation", "published_at": "2020-02-10T00:00:00+00:00" }, { "id": "01a07d5d-7935-715f-aeee-643baff920f7", "title": "Fix the \"not wrapped in act(...)\" warning", "url": "https://kentcdodds.com/blog/fix-the-not-wrapped-in-act-warning", "published_at": "2020-02-03T00:00:00+00:00" }, { "id": "01a07d5d-7935-715f-aeee-643bb0cc4520", "title": "Super Simple Start to ESModules in the Browser", "url": "https://kentcdodds.com/blog/super-simple-start-to-es-modules-in-the-browser", "published_at": "2020-01-22T00:00:00+00:00" }, { "id": "01a07d5d-7935-715f-aeee-643bb14445e0", "title": "Implementing a simple state machine library in JavaScript", "url": "https://kentcdodds.com/blog/implementing-a-simple-state-machine-library-in-javascript", "published_at": "2020-01-20T00:00:00+00:00" }, { "id": "01a07d5d-7935-715f-aeee-643bb21b9d0d", "title": "2010s Decade in Review", "url": "https://kentcdodds.com/blog/2010s-decade-in-review", "published_at": "2019-12-31T00:00:00+00:00" }, { "id": "01a07d5d-7935-715f-aeee-643bb2da0d28", "title": "Why users care about how you write code", "url": "https://kentcdodds.com/blog/why-users-care-about-how-you-write-code", "published_at": "2019-12-23T00:00:00+00:00" }, { "id": "01a07d5d-7935-715f-aeee-643bb370c99d", "title": "Why I avoid nesting closures", "url": "https://kentcdodds.com/blog/why-i-avoid-nesting-closures", "published_at": "2019-12-13T00:00:00+00:00" }, { "id": "01a07d5d-7935-715f-aeee-643bb41fb0bc", "title": "Don't call a React function component", "url": "https://kentcdodds.com/blog/dont-call-a-react-function-component", "published_at": "2019-12-08T00:00:00+00:00" }, { "id": "01a07d5d-7935-715f-aeee-643bb4fce049", "title": "Why your team needs TestingJavaScript.com", "url": "https://kentcdodds.com/blog/why-your-team-needs-testing-javascript-com", "published_at": "2019-12-03T00:00:00+00:00" }, { "id": "01a07d5d-7935-715f-aeee-643bb5a04f3e", "title": "Inversion of Control", "url": "https://kentcdodds.com/blog/inversion-of-control", "published_at": "2019-11-18T00:00:00+00:00" }, { "id": "01a07d5d-7935-715f-aeee-643bb67f4d9f", "title": "Understanding React's key prop", "url": "https://kentcdodds.com/blog/understanding-reacts-key-prop", "published_at": "2019-11-11T00:00:00+00:00" } ] posts Claim your blog
Back to Kent C. Dodds
Blog ยท corpus.blog/blogs/kentcdodds.com/posts

Kent C. Dodds

kentcdodds.com

2026

2025

2024

2023

2022

2021

2020

2019