├── .github └── FUNDING.yml ├── .gitignore ├── .nvmrc ├── CHANGELOG.md ├── CONTRIBUTING.md ├── LICENSE ├── README.md ├── content ├── pages │ ├── .gitignore │ └── sponsors │ │ └── index.mdx └── posts │ ├── 2021-in-review │ ├── 2021.jpeg │ ├── index.mdx │ └── metrics.png │ ├── 2022-in-review │ ├── 2022.jpeg │ ├── blog-2022.png │ ├── index.mdx │ └── tanstack-query.png │ ├── 2023-in-review │ ├── 2023.jpg │ └── index.mdx │ ├── 2024-in-review │ ├── 2024.jpg │ ├── index.mdx │ └── router-comparisons.webp │ ├── about-async-functions │ ├── async.jpeg │ └── index.mdx │ ├── always-provide-customer-value │ ├── index.mdx │ └── value.jpeg │ ├── array-types-in-type-script │ ├── array-of-object.png │ ├── array-vs-generic.jpg │ └── index.mdx │ ├── automatic-query-invalidation-after-mutations │ ├── automatic-invalidation.jpg │ └── index.mdx │ ├── avoiding-hydration-mismatches-with-use-sync-external-store │ ├── index.mdx │ └── mismatch.jpg │ ├── avoiding-legacy-systems │ ├── commit.jpeg │ ├── index.mdx │ └── legacy.jpg │ ├── avoiding-use-effect-with-callback-refs │ ├── callback.jpeg │ └── index.mdx │ ├── beware-the-leaking-any │ ├── index.mdx │ └── leaking-any.jpeg │ ├── breaking-react-querys-api-on-purpose │ ├── breaking-glass.jpeg │ └── index.mdx │ ├── calling-java-script-from-type-script │ ├── call.jpg │ └── index.mdx │ ├── component-composition-is-great-btw │ ├── index.mdx │ ├── lego.jpg │ └── three-states.png │ ├── concurrent-optimistic-updates-in-react-query │ ├── concurrent-mutations.png │ ├── concurrent-optimistic-updates.jpg │ ├── index.mdx │ ├── limited-invalidations.png │ ├── window-of-inconsistency.png │ └── with-query-cancellation.png │ ├── dont-over-use-state │ ├── index.mdx │ └── use-state-pitfalls.png │ ├── effective-react-query-keys │ ├── index.mdx │ └── keys.jpeg │ ├── exhaustive-matching-in-type-script │ ├── exhaustive-matching.jpg │ └── index.mdx │ ├── flow-to-type-script-migration-journey │ ├── index.mdx │ ├── merged.png │ └── race.jpg │ ├── hooks-dependencies-and-stale-closures │ ├── index.mdx │ └── people-holding-smartphones.jpeg │ ├── how-can-i │ ├── how.jpeg │ ├── index.mdx │ └── use-case.png │ ├── how-infinite-queries-work │ ├── index.mdx │ └── infinite-queries.jpg │ ├── inside-react-query │ ├── architecture.png │ ├── devtools.png │ ├── flow.png │ ├── hood.jpeg │ ├── index.mdx │ ├── query.png │ ├── queryCache.png │ ├── queryClient.png │ └── queryObserver.png │ ├── introducing-x-state-store │ ├── index.mdx │ └── store.jpg │ ├── leveraging-the-query-function-context │ ├── context.jpeg │ ├── destruct-query-key.png │ └── index.mdx │ ├── mastering-mutations-in-react-query │ ├── index.mdx │ └── mutations.jpeg │ ├── my-open-source-origin-story │ ├── index.mdx │ ├── origin-story.jpg │ └── tkdodo-welcome.png │ ├── my-slow-retreat-from-twitter │ ├── index.mdx │ └── sea.jpg │ ├── no-love-for-boolean-parameters │ ├── boolean.jpg │ └── index.mdx │ ├── offline-react-query │ ├── index.mdx │ └── offline.jpeg │ ├── on-naming-things │ ├── index.mdx │ └── naming.jpg │ ├── optional-vs-undefined │ ├── index.mdx │ └── optional-undefined.jpeg │ ├── oss-feature-decision-tree │ ├── decision.jpeg │ └── index.mdx │ ├── pedantic-index-signatures-in-type-script-4-1 │ ├── books.png │ └── index.mdx │ ├── placeholder-and-initial-data-in-react-query │ ├── index.mdx │ ├── observers.png │ └── placeholder-and-initial-data.jpeg │ ├── please-stop-using-barrel-files │ ├── barrel.jpg │ └── index.mdx │ ├── practical-react-query │ ├── index.mdx │ └── practical.jpg │ ├── putting-props-to-use-state │ ├── index.mdx │ └── use-state-pitfalls.png │ ├── react-19-and-suspense-a-drama-in-3-acts │ ├── index.mdx │ └── suspense.jpeg │ ├── react-query-and-forms │ ├── forms.jpeg │ └── index.mdx │ ├── react-query-and-react-context │ ├── context.jpeg │ ├── index.mdx │ └── props-vs-context.png │ ├── react-query-and-type-script │ ├── index.mdx │ └── react-query-typescript.jpeg │ ├── react-query-api-design-lessons-learned │ ├── index.mdx │ └── lessons-learned.jpg │ ├── react-query-as-a-state-manager │ ├── index.mdx │ └── state-management.jpeg │ ├── react-query-data-transformations │ ├── index.mdx │ └── transformations.jpeg │ ├── react-query-error-handling │ ├── error-handling.jpeg │ └── index.mdx │ ├── react-query-fa-qs │ ├── faq.jpeg │ └── index.mdx │ ├── react-query-meets-react-router │ ├── index.mdx │ └── rq-rr.jpeg │ ├── react-query-render-optimizations │ ├── index.mdx │ └── optimizations.jpeg │ ├── react-query-the-bad-parts │ ├── bad-parts.jpg │ └── index.mdx │ ├── ref-callbacks-react-19-and-the-compiler │ ├── index.mdx │ └── ref-callbacks.jpg │ ├── refactor-impactfully │ ├── impact.jpeg │ └── index.mdx │ ├── refs-events-and-escape-hatches │ ├── index.mdx │ └── silhouette-of-people-during-concert.jpeg │ ├── road-to-refactoring │ ├── index.mdx │ └── road.jpeg │ ├── seeding-the-query-cache │ ├── dependent-queries.png │ ├── fetch-waterfall.png │ ├── index.mdx │ ├── parallel-queries.png │ ├── prefetching.png │ └── seeding.jpeg │ ├── simplifying-use-effect │ ├── effect.jpg │ └── index.mdx │ ├── solving-conflicts-in-package-lock-json │ ├── index.mdx │ ├── lock.jpg │ └── semver-calc.png │ ├── status-checks-in-react-query │ ├── index.mdx │ └── status-checks.jpeg │ ├── testing-react-query │ ├── index.mdx │ └── testing.jpeg │ ├── the-beauty-of-tan-stack-router │ ├── beauty.jpg │ └── index.mdx │ ├── the-power-of-const-assertions │ ├── index.mdx │ └── power.jpg │ ├── the-query-options-api │ ├── index.mdx │ └── ponder.jpg │ ├── the-uphill-battle-of-memoization │ ├── index.mdx │ └── uphill.png │ ├── things-to-know-about-use-state │ ├── index.mdx │ └── use-state-pitfalls.png │ ├── thinking-in-react-query │ ├── index.mdx │ └── thinking.png │ ├── type-safe-react-query │ ├── index.mdx │ └── type-safe.jpeg │ ├── use-state-for-one-time-initializations │ ├── index.mdx │ └── use-state-pitfalls.png │ ├── use-state-vs-use-reducer │ ├── index.mdx │ └── usestate-vs-usereducer.jpeg │ ├── use-urgency │ ├── index.mdx │ └── urgency.jpeg │ ├── using-web-sockets-with-react-query │ ├── index.mdx │ └── react-query-websockets.jpeg │ ├── why-i-dont-like-reduce │ ├── index.mdx │ └── swiss-knife.png │ ├── why-react-isnt-dying │ ├── dying.jpeg │ ├── growth-loop.png │ └── index.mdx │ ├── why-you-want-react-query │ ├── index.mdx │ ├── race.png │ ├── this_is_fine.jpg │ └── want.jpg │ ├── working-with-zustand │ ├── bear.jpeg │ └── index.mdx │ ├── you-might-not-need-react-query │ ├── index.mdx │ ├── tradeoffs.jpeg │ └── trees.jpeg │ └── zustand-and-react-context │ ├── index.mdx │ └── zustand-context.jpg ├── gatsby-config.js ├── gatsby-node.js ├── gatsby-ssr.js ├── netlify.toml ├── og-image.tsx ├── package-lock.json ├── package.json ├── patches ├── @devular+gatsby-plugin-plausible+0.1.8.patch └── @lekoarts+gatsby-theme-minimal-blog-core+4.1.4.patch ├── src ├── @lekoarts │ └── gatsby-theme-minimal-blog │ │ ├── components │ │ ├── DocSearch.tsx │ │ ├── blog.tsx │ │ ├── header-title.tsx │ │ ├── homepage.tsx │ │ ├── listing.tsx │ │ └── post.tsx │ │ ├── styles │ │ └── code.ts │ │ └── texts │ │ ├── About.tsx │ │ ├── bottom.mdx │ │ └── hero.mdx ├── components │ ├── Ads.tsx │ ├── Aside.tsx │ ├── Attribution.tsx │ ├── Comments.tsx │ ├── Del.tsx │ ├── Emph.tsx │ ├── FixTitle.tsx │ ├── GifPlayer.jsx │ ├── Highlight.tsx │ ├── HighlightBox.tsx │ ├── MonoLisa.tsx │ ├── OgImage.tsx │ ├── PremiumSponsors.tsx │ ├── QueryGG.tsx │ ├── SmallCentered.tsx │ ├── SpacingBox.tsx │ ├── Sponsors.tsx │ ├── Translations.tsx │ ├── Tweet.tsx │ ├── TweetPoll.tsx │ ├── VerticalRuler.tsx │ ├── react-query-api-design-lessons-learned │ │ ├── index.tsx │ │ └── slide.tsx │ ├── react-query-the-bad-parts │ │ ├── index.tsx │ │ └── slide.tsx │ ├── rq-toc.tsx │ └── thinking-in-react-query │ │ ├── index.tsx │ │ └── slide.tsx └── gatsby-plugin-theme-ui │ └── index.js └── static ├── apple-touch-icon.png ├── blog-banner.png ├── favicon-16x16.png ├── favicon-32x32.png ├── favicon.ico ├── fonts ├── Inter-Regular.woff ├── Inter.woff2 ├── MonoLisaVariableItalic.woff2 └── MonoLisaVariableNormal.woff2 ├── images ├── 1021430.jpeg ├── EXx9RHYVAAUgegZ.jpeg ├── FSJNvbJWUAIVEGB.jpeg ├── FVegS4nXwAQHskN.jpeg ├── Fcnj9l0XEAMnLdV.jpeg ├── FxnXEGVX0AEeYAf.jpeg ├── GP-724-X0AAN_NK.jpeg ├── GabbeV_.jpg ├── TanStackQueryV5.png ├── acdlite.jpg ├── acemarke.jpeg ├── alexdotjs.jpg ├── ballingt.jpg ├── bytes.jpg ├── danvdk.jpeg ├── diegohaz.jpeg ├── eC_qCxd4.jpeg ├── housecor.png ├── kierb.jpg ├── leeerob.jpeg ├── mattpocockuk.jpeg ├── meow.svg ├── michaelc_1991.jpeg ├── monolisa.jpeg ├── mxstbr.jpg ├── profile.jpg ├── query-gg.jpg ├── ralex1993.jpg ├── react-query-api-design-lessons-learned │ ├── dark │ │ ├── 1.png │ │ ├── 10.png │ │ ├── 11.png │ │ ├── 12.png │ │ ├── 13.png │ │ ├── 14.png │ │ ├── 15.png │ │ ├── 16.png │ │ ├── 17.png │ │ ├── 18.png │ │ ├── 19.png │ │ ├── 2.png │ │ ├── 20.png │ │ ├── 21.png │ │ ├── 22.png │ │ ├── 23.png │ │ ├── 24.png │ │ ├── 25.png │ │ ├── 26.png │ │ ├── 27.png │ │ ├── 28.png │ │ ├── 29.png │ │ ├── 3.png │ │ ├── 30.png │ │ ├── 31.png │ │ ├── 32.png │ │ ├── 33.png │ │ ├── 34.png │ │ ├── 35.png │ │ ├── 36.png │ │ ├── 37.png │ │ ├── 38.png │ │ ├── 39.png │ │ ├── 4.png │ │ ├── 40.png │ │ ├── 41.png │ │ ├── 42.png │ │ ├── 43.png │ │ ├── 44.png │ │ ├── 45.png │ │ ├── 46.png │ │ ├── 47.png │ │ ├── 48.png │ │ ├── 49.png │ │ ├── 5.png │ │ ├── 50.png │ │ ├── 51.png │ │ ├── 52.png │ │ ├── 53.png │ │ ├── 54.png │ │ ├── 55.png │ │ ├── 56.png │ │ ├── 57.png │ │ ├── 58.png │ │ ├── 59.png │ │ ├── 6.png │ │ ├── 60.png │ │ ├── 61.png │ │ ├── 7.png │ │ ├── 8.png │ │ └── 9.png │ └── light │ │ ├── 1.png │ │ ├── 10.png │ │ ├── 11.png │ │ ├── 12.png │ │ ├── 13.png │ │ ├── 14.png │ │ ├── 15.png │ │ ├── 16.png │ │ ├── 17.png │ │ ├── 18.png │ │ ├── 19.png │ │ ├── 2.png │ │ ├── 20.png │ │ ├── 21.png │ │ ├── 22.png │ │ ├── 23.png │ │ ├── 24.png │ │ ├── 25.png │ │ ├── 26.png │ │ ├── 27.png │ │ ├── 28.png │ │ ├── 29.png │ │ ├── 3.png │ │ ├── 30.png │ │ ├── 31.png │ │ ├── 32.png │ │ ├── 33.png │ │ ├── 34.png │ │ ├── 35.png │ │ ├── 36.png │ │ ├── 37.png │ │ ├── 38.png │ │ ├── 39.png │ │ ├── 4.png │ │ ├── 40.png │ │ ├── 41.png │ │ ├── 42.png │ │ ├── 43.png │ │ ├── 44.png │ │ ├── 45.png │ │ ├── 46.png │ │ ├── 47.png │ │ ├── 48.png │ │ ├── 49.png │ │ ├── 5.png │ │ ├── 50.png │ │ ├── 51.png │ │ ├── 52.png │ │ ├── 53.png │ │ ├── 54.png │ │ ├── 55.png │ │ ├── 56.png │ │ ├── 57.png │ │ ├── 58.png │ │ ├── 59.png │ │ ├── 6.png │ │ ├── 60.png │ │ ├── 61.png │ │ ├── 7.png │ │ ├── 8.png │ │ └── 9.png ├── react-query-the-bad-parts │ ├── 1.png │ ├── 10.png │ ├── 11.png │ ├── 12.png │ ├── 13.png │ ├── 14.png │ ├── 15.png │ ├── 16.png │ ├── 17.png │ ├── 18.png │ ├── 19.png │ ├── 2.png │ ├── 20.png │ ├── 21.png │ ├── 22.png │ ├── 23.png │ ├── 24.png │ ├── 25.png │ ├── 26.png │ ├── 27.png │ ├── 28.png │ ├── 29.png │ ├── 3.png │ ├── 30.png │ ├── 31.png │ ├── 32.png │ ├── 33.png │ ├── 34.png │ ├── 35.png │ ├── 36.png │ ├── 37.png │ ├── 38.png │ ├── 39.png │ ├── 4.png │ ├── 40.png │ ├── 41.png │ ├── 42.png │ ├── 43.png │ ├── 44.png │ ├── 45.png │ ├── 46.png │ ├── 47.png │ ├── 48.png │ ├── 49.png │ ├── 5.png │ ├── 50.png │ ├── 51.png │ ├── 52.png │ ├── 53.png │ ├── 54.png │ ├── 55.png │ ├── 56.png │ ├── 57.png │ ├── 58.png │ ├── 59.png │ ├── 6.png │ ├── 60.png │ ├── 61.png │ ├── 62.png │ ├── 7.png │ ├── 8.png │ └── 9.png ├── reactbricks.svg ├── ryanflorence.jpeg ├── sathya.jpg ├── separation_of_concerns.jpeg ├── sophiebits.jpeg ├── swyx.jpeg ├── tannerlinsley.jpeg ├── theo_twitter.jpg ├── thinking-in-react-query │ ├── 1.png │ ├── 10.png │ ├── 11.png │ ├── 12.png │ ├── 13.png │ ├── 14.png │ ├── 15.png │ ├── 16.png │ ├── 17.png │ ├── 18.png │ ├── 19.png │ ├── 2.png │ ├── 20.png │ ├── 21.png │ ├── 22.png │ ├── 23.png │ ├── 24.png │ ├── 25.png │ ├── 26.png │ ├── 27.png │ ├── 28.png │ ├── 29.png │ ├── 3.png │ ├── 30.png │ ├── 31.png │ ├── 32.png │ ├── 33.png │ ├── 34.png │ ├── 35.png │ ├── 36.png │ ├── 37.png │ ├── 38.png │ ├── 39.png │ ├── 4.png │ ├── 40.png │ ├── 41.png │ ├── 42.png │ ├── 43.png │ ├── 44.png │ ├── 45.png │ ├── 46.png │ ├── 47.png │ ├── 48.png │ ├── 49.png │ ├── 5.png │ ├── 50.png │ ├── 51.png │ ├── 52.png │ ├── 53.png │ ├── 54.png │ ├── 55.png │ ├── 56.png │ ├── 6.png │ ├── 7.png │ ├── 8.png │ └── 9.png ├── trpc.png ├── v5390.jpeg ├── willmcgugan.jpeg └── workflowgen.png ├── loading-forever.gif ├── loading-forever.png ├── network-error.gif ├── network-error.png ├── og-images ├── 2021-in-review.png ├── 2022-in-review.png ├── 2023-in-review.png ├── 2024-in-review.png ├── about-async-functions.png ├── always-provide-customer-value.png ├── array-types-in-type-script.png ├── automatic-query-invalidation-after-mutations.png ├── avoiding-hydration-mismatches-with-use-sync-external-store.png ├── avoiding-legacy-systems.png ├── avoiding-use-effect-with-callback-refs.png ├── beware-the-leaking-any.png ├── breaking-react-querys-api-on-purpose.png ├── calling-java-script-from-type-script.png ├── component-composition-is-great-btw.png ├── concurrent-optimistic-updates-in-react-query.png ├── dont-over-use-state.png ├── effective-react-query-keys.png ├── exhaustive-matching-in-type-script.png ├── flow-to-type-script-migration-journey.png ├── hooks-dependencies-and-stale-closures.png ├── how-can-i.png ├── how-infinite-queries-work.png ├── inside-react-query.png ├── introducing-x-state-store.png ├── leveraging-the-query-function-context.png ├── mastering-mutations-in-react-query.png ├── my-open-source-origin-story.png ├── my-slow-retreat-from-twitter.png ├── no-love-for-boolean-parameters.png ├── offline-react-query.png ├── on-naming-things.png ├── optional-vs-undefined.png ├── oss-feature-decision-tree.png ├── pedantic-index-signatures-in-type-script-4-1.png ├── placeholder-and-initial-data-in-react-query.png ├── please-stop-using-barrel-files.png ├── practical-react-query.png ├── putting-props-to-use-state.png ├── react-19-and-suspense-a-drama-in-3-acts.png ├── react-query-and-forms.png ├── react-query-and-react-context.png ├── react-query-and-type-script.png ├── react-query-api-design-lessons-learned.png ├── react-query-as-a-state-manager.png ├── react-query-data-transformations.png ├── react-query-error-handling.png ├── react-query-fa-qs.png ├── react-query-meets-react-router.png ├── react-query-render-optimizations.png ├── react-query-the-bad-parts.png ├── ref-callbacks-react-19-and-the-compiler.png ├── refactor-impactfully.png ├── refs-events-and-escape-hatches.png ├── road-to-refactoring.png ├── seeding-the-query-cache.png ├── simplifying-use-effect.png ├── solving-conflicts-in-package-lock-json.png ├── status-checks-in-react-query.png ├── testing-react-query.png ├── the-beauty-of-tan-stack-router.png ├── the-power-of-const-assertions.png ├── the-query-options-api.png ├── the-uphill-battle-of-memoization.png ├── things-to-know-about-use-state.png ├── thinking-in-react-query.png ├── type-safe-react-query.png ├── use-state-for-one-time-initializations.png ├── use-state-vs-use-reducer.png ├── use-urgency.png ├── using-web-sockets-with-react-query.png ├── why-i-dont-like-reduce.png ├── why-react-isnt-dying.png ├── why-you-want-react-query.png ├── working-with-zustand.png ├── you-might-not-need-react-query.png └── zustand-and-react-context.png ├── paused.gif ├── paused.png ├── robots.txt ├── stack.png ├── tk-logo.png ├── wings4life-still.gif └── wings4life.gif /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | github: tkdodo 2 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | 8 | # Runtime data 9 | pids 10 | *.pid 11 | *.seed 12 | *.pid.lock 13 | 14 | # Directory for instrumented libs generated by jscoverage/JSCover 15 | lib-cov 16 | 17 | # Coverage directory used by tools like istanbul 18 | coverage 19 | 20 | # nyc test coverage 21 | .nyc_output 22 | 23 | # Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) 24 | .grunt 25 | 26 | # Bower dependency directory (https://bower.io/) 27 | bower_components 28 | 29 | # node-waf configuration 30 | .lock-wscript 31 | 32 | # Compiled binary addons (http://nodejs.org/api/addons.html) 33 | build/Release 34 | 35 | # Dependency directories 36 | node_modules 37 | jspm_packages 38 | **/node_modules/** 39 | 40 | # Typescript v1 declaration files 41 | typings/ 42 | 43 | # Optional npm cache directory 44 | .npm 45 | 46 | # Optional eslint cache 47 | .eslintcache 48 | 49 | # Optional REPL history 50 | .node_repl_history 51 | 52 | # Output of 'npm pack' 53 | *.tgz 54 | 55 | # Yarn Integrity file 56 | .yarn-integrity 57 | 58 | # dotenv environment variables file 59 | .env 60 | .env.* 61 | !.env.example 62 | 63 | .cache 64 | **/.cache 65 | public 66 | 67 | .idea 68 | .vscode 69 | .DS_Store -------------------------------------------------------------------------------- /.nvmrc: -------------------------------------------------------------------------------- 1 | 20.6.1 2 | -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # Contributing 2 | 3 | ## Translations 4 | 5 | I'm more than happy to accept translations of my blogposts to other languages, however, I will not host them here. 6 | Once you have an up and running translation, just open a pull request to add the link, or let me know, and I'll link to it. 7 | 8 | [Here](https://github.com/TkDodo/blog/blob/dcde80a2fce8b38c352db045f49c608abff50daa/content/posts/practical-react-query/index.mdx?plain=1#L37-L52) is an example of a translated post that could help to get you started. 9 | 10 | The only requirement is that at the beginning of your translation, you explain 11 | that it is a translation of the original post and link back to the original 12 | post. 13 | 14 | If you notice an error in an existing translation or if the link to the 15 | translation is not working, please try to reach out to the translator directly 16 | to get it fixed. The only thing I can do in this repo is remove the link. If 17 | you feel that's necessary, feel free to open a pull request to do that. 18 | 19 | Thanks for helping to make my content more accessible! 20 | 21 | > This process is inspired by [Kent C. Dodds](https://twitter.com/kentcdodds) and how he does [translations](https://github.com/kentcdodds/kentcdodds.com/blob/main/CONTRIBUTING.md#translation-contributions) on his [blog](https://kentcdodds.com/blog). 22 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2019 LekoArts 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # blog 2 | 3 | [![Netlify Status](https://api.netlify.com/api/v1/badges/97b2b6fa-38e7-472b-a6cc-5ba88db2ad22/deploy-status)](https://app.netlify.com/sites/tkdodo/deploys) 4 | -------------------------------------------------------------------------------- /content/pages/.gitignore: -------------------------------------------------------------------------------- 1 | # Except this file 2 | !.gitignore 3 | -------------------------------------------------------------------------------- /content/pages/sponsors/index.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: Sponsors 3 | slug: '/sponsors' 4 | --- 5 | 6 | import Sponsors from 'components/Sponsors' 7 | 8 | 9 | -------------------------------------------------------------------------------- /content/posts/2021-in-review/2021.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/content/posts/2021-in-review/2021.jpeg -------------------------------------------------------------------------------- /content/posts/2021-in-review/metrics.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/content/posts/2021-in-review/metrics.png -------------------------------------------------------------------------------- /content/posts/2022-in-review/2022.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/content/posts/2022-in-review/2022.jpeg -------------------------------------------------------------------------------- /content/posts/2022-in-review/blog-2022.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/content/posts/2022-in-review/blog-2022.png -------------------------------------------------------------------------------- /content/posts/2022-in-review/tanstack-query.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/content/posts/2022-in-review/tanstack-query.png -------------------------------------------------------------------------------- /content/posts/2023-in-review/2023.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/content/posts/2023-in-review/2023.jpg -------------------------------------------------------------------------------- /content/posts/2024-in-review/2024.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/content/posts/2024-in-review/2024.jpg -------------------------------------------------------------------------------- /content/posts/2024-in-review/router-comparisons.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/content/posts/2024-in-review/router-comparisons.webp -------------------------------------------------------------------------------- /content/posts/about-async-functions/async.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/content/posts/about-async-functions/async.jpeg -------------------------------------------------------------------------------- /content/posts/always-provide-customer-value/value.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/content/posts/always-provide-customer-value/value.jpeg -------------------------------------------------------------------------------- /content/posts/array-types-in-type-script/array-of-object.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/content/posts/array-types-in-type-script/array-of-object.png -------------------------------------------------------------------------------- /content/posts/array-types-in-type-script/array-vs-generic.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/content/posts/array-types-in-type-script/array-vs-generic.jpg -------------------------------------------------------------------------------- /content/posts/automatic-query-invalidation-after-mutations/automatic-invalidation.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/content/posts/automatic-query-invalidation-after-mutations/automatic-invalidation.jpg -------------------------------------------------------------------------------- /content/posts/avoiding-hydration-mismatches-with-use-sync-external-store/mismatch.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/content/posts/avoiding-hydration-mismatches-with-use-sync-external-store/mismatch.jpg -------------------------------------------------------------------------------- /content/posts/avoiding-legacy-systems/commit.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/content/posts/avoiding-legacy-systems/commit.jpeg -------------------------------------------------------------------------------- /content/posts/avoiding-legacy-systems/legacy.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/content/posts/avoiding-legacy-systems/legacy.jpg -------------------------------------------------------------------------------- /content/posts/avoiding-use-effect-with-callback-refs/callback.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/content/posts/avoiding-use-effect-with-callback-refs/callback.jpeg -------------------------------------------------------------------------------- /content/posts/beware-the-leaking-any/leaking-any.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/content/posts/beware-the-leaking-any/leaking-any.jpeg -------------------------------------------------------------------------------- /content/posts/breaking-react-querys-api-on-purpose/breaking-glass.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/content/posts/breaking-react-querys-api-on-purpose/breaking-glass.jpeg -------------------------------------------------------------------------------- /content/posts/calling-java-script-from-type-script/call.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/content/posts/calling-java-script-from-type-script/call.jpg -------------------------------------------------------------------------------- /content/posts/component-composition-is-great-btw/lego.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/content/posts/component-composition-is-great-btw/lego.jpg -------------------------------------------------------------------------------- /content/posts/component-composition-is-great-btw/three-states.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/content/posts/component-composition-is-great-btw/three-states.png -------------------------------------------------------------------------------- /content/posts/concurrent-optimistic-updates-in-react-query/concurrent-mutations.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/content/posts/concurrent-optimistic-updates-in-react-query/concurrent-mutations.png -------------------------------------------------------------------------------- /content/posts/concurrent-optimistic-updates-in-react-query/concurrent-optimistic-updates.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/content/posts/concurrent-optimistic-updates-in-react-query/concurrent-optimistic-updates.jpg -------------------------------------------------------------------------------- /content/posts/concurrent-optimistic-updates-in-react-query/limited-invalidations.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/content/posts/concurrent-optimistic-updates-in-react-query/limited-invalidations.png -------------------------------------------------------------------------------- /content/posts/concurrent-optimistic-updates-in-react-query/window-of-inconsistency.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/content/posts/concurrent-optimistic-updates-in-react-query/window-of-inconsistency.png -------------------------------------------------------------------------------- /content/posts/concurrent-optimistic-updates-in-react-query/with-query-cancellation.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/content/posts/concurrent-optimistic-updates-in-react-query/with-query-cancellation.png -------------------------------------------------------------------------------- /content/posts/dont-over-use-state/use-state-pitfalls.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/content/posts/dont-over-use-state/use-state-pitfalls.png -------------------------------------------------------------------------------- /content/posts/effective-react-query-keys/keys.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/content/posts/effective-react-query-keys/keys.jpeg -------------------------------------------------------------------------------- /content/posts/exhaustive-matching-in-type-script/exhaustive-matching.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/content/posts/exhaustive-matching-in-type-script/exhaustive-matching.jpg -------------------------------------------------------------------------------- /content/posts/flow-to-type-script-migration-journey/merged.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/content/posts/flow-to-type-script-migration-journey/merged.png -------------------------------------------------------------------------------- /content/posts/flow-to-type-script-migration-journey/race.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/content/posts/flow-to-type-script-migration-journey/race.jpg -------------------------------------------------------------------------------- /content/posts/hooks-dependencies-and-stale-closures/people-holding-smartphones.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/content/posts/hooks-dependencies-and-stale-closures/people-holding-smartphones.jpeg -------------------------------------------------------------------------------- /content/posts/how-can-i/how.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/content/posts/how-can-i/how.jpeg -------------------------------------------------------------------------------- /content/posts/how-can-i/use-case.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/content/posts/how-can-i/use-case.png -------------------------------------------------------------------------------- /content/posts/how-infinite-queries-work/infinite-queries.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/content/posts/how-infinite-queries-work/infinite-queries.jpg -------------------------------------------------------------------------------- /content/posts/inside-react-query/architecture.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/content/posts/inside-react-query/architecture.png -------------------------------------------------------------------------------- /content/posts/inside-react-query/devtools.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/content/posts/inside-react-query/devtools.png -------------------------------------------------------------------------------- /content/posts/inside-react-query/flow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/content/posts/inside-react-query/flow.png -------------------------------------------------------------------------------- /content/posts/inside-react-query/hood.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/content/posts/inside-react-query/hood.jpeg -------------------------------------------------------------------------------- /content/posts/inside-react-query/query.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/content/posts/inside-react-query/query.png -------------------------------------------------------------------------------- /content/posts/inside-react-query/queryCache.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/content/posts/inside-react-query/queryCache.png -------------------------------------------------------------------------------- /content/posts/inside-react-query/queryClient.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/content/posts/inside-react-query/queryClient.png -------------------------------------------------------------------------------- /content/posts/inside-react-query/queryObserver.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/content/posts/inside-react-query/queryObserver.png -------------------------------------------------------------------------------- /content/posts/introducing-x-state-store/store.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/content/posts/introducing-x-state-store/store.jpg -------------------------------------------------------------------------------- /content/posts/leveraging-the-query-function-context/context.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/content/posts/leveraging-the-query-function-context/context.jpeg -------------------------------------------------------------------------------- /content/posts/leveraging-the-query-function-context/destruct-query-key.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/content/posts/leveraging-the-query-function-context/destruct-query-key.png -------------------------------------------------------------------------------- /content/posts/mastering-mutations-in-react-query/mutations.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/content/posts/mastering-mutations-in-react-query/mutations.jpeg -------------------------------------------------------------------------------- /content/posts/my-open-source-origin-story/origin-story.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/content/posts/my-open-source-origin-story/origin-story.jpg -------------------------------------------------------------------------------- /content/posts/my-open-source-origin-story/tkdodo-welcome.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/content/posts/my-open-source-origin-story/tkdodo-welcome.png -------------------------------------------------------------------------------- /content/posts/my-slow-retreat-from-twitter/sea.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/content/posts/my-slow-retreat-from-twitter/sea.jpg -------------------------------------------------------------------------------- /content/posts/no-love-for-boolean-parameters/boolean.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/content/posts/no-love-for-boolean-parameters/boolean.jpg -------------------------------------------------------------------------------- /content/posts/offline-react-query/offline.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/content/posts/offline-react-query/offline.jpeg -------------------------------------------------------------------------------- /content/posts/on-naming-things/naming.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/content/posts/on-naming-things/naming.jpg -------------------------------------------------------------------------------- /content/posts/optional-vs-undefined/optional-undefined.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/content/posts/optional-vs-undefined/optional-undefined.jpeg -------------------------------------------------------------------------------- /content/posts/oss-feature-decision-tree/decision.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/content/posts/oss-feature-decision-tree/decision.jpeg -------------------------------------------------------------------------------- /content/posts/pedantic-index-signatures-in-type-script-4-1/books.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/content/posts/pedantic-index-signatures-in-type-script-4-1/books.png -------------------------------------------------------------------------------- /content/posts/placeholder-and-initial-data-in-react-query/observers.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/content/posts/placeholder-and-initial-data-in-react-query/observers.png -------------------------------------------------------------------------------- /content/posts/placeholder-and-initial-data-in-react-query/placeholder-and-initial-data.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/content/posts/placeholder-and-initial-data-in-react-query/placeholder-and-initial-data.jpeg -------------------------------------------------------------------------------- /content/posts/please-stop-using-barrel-files/barrel.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/content/posts/please-stop-using-barrel-files/barrel.jpg -------------------------------------------------------------------------------- /content/posts/practical-react-query/practical.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/content/posts/practical-react-query/practical.jpg -------------------------------------------------------------------------------- /content/posts/putting-props-to-use-state/use-state-pitfalls.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/content/posts/putting-props-to-use-state/use-state-pitfalls.png -------------------------------------------------------------------------------- /content/posts/react-19-and-suspense-a-drama-in-3-acts/suspense.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/content/posts/react-19-and-suspense-a-drama-in-3-acts/suspense.jpeg -------------------------------------------------------------------------------- /content/posts/react-query-and-forms/forms.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/content/posts/react-query-and-forms/forms.jpeg -------------------------------------------------------------------------------- /content/posts/react-query-and-react-context/context.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/content/posts/react-query-and-react-context/context.jpeg -------------------------------------------------------------------------------- /content/posts/react-query-and-react-context/props-vs-context.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/content/posts/react-query-and-react-context/props-vs-context.png -------------------------------------------------------------------------------- /content/posts/react-query-and-type-script/react-query-typescript.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/content/posts/react-query-and-type-script/react-query-typescript.jpeg -------------------------------------------------------------------------------- /content/posts/react-query-api-design-lessons-learned/index.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: React Query API Design - Lessons Learned 3 | description: In this talk, React Query maintainer Dominik will walk us through some of the API design choices that were made in React Query to get to that DX. You'll hear stories about things that went well, but also about tradeoffs and mistakes that were made, and what lessons we can all learn from those. 4 | date: 2024-10-25 5 | banner: ./lessons-learned.jpg 6 | tags: 7 | - ReactJs 8 | - React Query 9 | - Talk 10 | - TypeScript 11 | - JavaScript 12 | --- 13 | 14 | import Comments from 'components/Comments' 15 | import Translations from 'components/Translations' 16 | import Attribution from 'components/Attribution' 17 | import { ApiDesignPresentation } from 'components/react-query-api-design-lessons-learned' 18 | import { RqToc } from 'components/rq-toc' 19 | 20 | Times gone by a Back to School scene from the 20th Century. Blackboard and chalk. 24 | 25 | 26 | 27 | 28 | 29 | {[]} 30 | 31 | Here are the slides + transcript from the talk I recently gave at the [React Advanced](https://reactadvanced.com/) conference in London. You can swipe left or right or use the arrow buttons / arrow keys to switch between the slides. You can also find the recording on [the GitNation site](https://gitnation.com/contents/react-query-api-design-lessons-learned). Enjoy! 32 | 33 |
34 | 35 | 36 | 37 | --- 38 | 39 | That's it for today. Feel free to reach out to me on [bluesky](https://bsky.app/profile/tkdodo.eu) 40 | if you have any questions, or just leave a comment below. ⬇️ 41 | 42 | 43 | -------------------------------------------------------------------------------- /content/posts/react-query-api-design-lessons-learned/lessons-learned.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/content/posts/react-query-api-design-lessons-learned/lessons-learned.jpg -------------------------------------------------------------------------------- /content/posts/react-query-as-a-state-manager/state-management.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/content/posts/react-query-as-a-state-manager/state-management.jpeg -------------------------------------------------------------------------------- /content/posts/react-query-data-transformations/transformations.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/content/posts/react-query-data-transformations/transformations.jpeg -------------------------------------------------------------------------------- /content/posts/react-query-error-handling/error-handling.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/content/posts/react-query-error-handling/error-handling.jpeg -------------------------------------------------------------------------------- /content/posts/react-query-fa-qs/faq.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/content/posts/react-query-fa-qs/faq.jpeg -------------------------------------------------------------------------------- /content/posts/react-query-meets-react-router/rq-rr.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/content/posts/react-query-meets-react-router/rq-rr.jpeg -------------------------------------------------------------------------------- /content/posts/react-query-render-optimizations/optimizations.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/content/posts/react-query-render-optimizations/optimizations.jpeg -------------------------------------------------------------------------------- /content/posts/react-query-the-bad-parts/bad-parts.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/content/posts/react-query-the-bad-parts/bad-parts.jpg -------------------------------------------------------------------------------- /content/posts/react-query-the-bad-parts/index.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: React Query - The Bad Parts 3 | description: In this talk, maintainer Dominik will explore the other side—the less favorable aspects of React Query and situations where it may not be the best fit. No library is perfect; every choice involves trade-offs. By the end of this talk, you'll have a better understanding of React Query's limitations and why it remains a compelling choice despite them. 4 | date: 2024-12-28 5 | banner: ./bad-parts.jpg 6 | tags: 7 | - ReactJs 8 | - React Query 9 | - Talk 10 | - TypeScript 11 | - JavaScript 12 | --- 13 | 14 | import Comments from 'components/Comments' 15 | import Translations from 'components/Translations' 16 | import Attribution from 'components/Attribution' 17 | import { TheBadPartsPresentation } from 'components/react-query-the-bad-parts' 18 | import { RqToc } from 'components/rq-toc' 19 | 20 | focus photography of gray and black DSLR camera 24 | 25 | 29 | 30 | 31 | 32 | {[]} 33 | 34 | Here are the slides + transcript from the talk I recently gave at the [React Day Berlin](https://reactday.berlin/) conference. You can swipe left or right or use the arrow buttons / arrow keys to switch between the slides. You can also find the recording on [the GitNation site](https://gitnation.com/contents/react-query-the-bad-parts). Enjoy! 35 | 36 |
37 | 38 | 39 | 40 | --- 41 | 42 | That's it for today. Feel free to reach out to me on [bluesky](https://bsky.app/profile/tkdodo.eu) 43 | if you have any questions, or just leave a comment below. ⬇️ 44 | 45 | 46 | -------------------------------------------------------------------------------- /content/posts/ref-callbacks-react-19-and-the-compiler/ref-callbacks.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/content/posts/ref-callbacks-react-19-and-the-compiler/ref-callbacks.jpg -------------------------------------------------------------------------------- /content/posts/refactor-impactfully/impact.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/content/posts/refactor-impactfully/impact.jpeg -------------------------------------------------------------------------------- /content/posts/refs-events-and-escape-hatches/silhouette-of-people-during-concert.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/content/posts/refs-events-and-escape-hatches/silhouette-of-people-during-concert.jpeg -------------------------------------------------------------------------------- /content/posts/road-to-refactoring/road.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/content/posts/road-to-refactoring/road.jpeg -------------------------------------------------------------------------------- /content/posts/seeding-the-query-cache/dependent-queries.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/content/posts/seeding-the-query-cache/dependent-queries.png -------------------------------------------------------------------------------- /content/posts/seeding-the-query-cache/fetch-waterfall.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/content/posts/seeding-the-query-cache/fetch-waterfall.png -------------------------------------------------------------------------------- /content/posts/seeding-the-query-cache/parallel-queries.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/content/posts/seeding-the-query-cache/parallel-queries.png -------------------------------------------------------------------------------- /content/posts/seeding-the-query-cache/prefetching.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/content/posts/seeding-the-query-cache/prefetching.png -------------------------------------------------------------------------------- /content/posts/seeding-the-query-cache/seeding.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/content/posts/seeding-the-query-cache/seeding.jpeg -------------------------------------------------------------------------------- /content/posts/simplifying-use-effect/effect.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/content/posts/simplifying-use-effect/effect.jpg -------------------------------------------------------------------------------- /content/posts/solving-conflicts-in-package-lock-json/lock.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/content/posts/solving-conflicts-in-package-lock-json/lock.jpg -------------------------------------------------------------------------------- /content/posts/solving-conflicts-in-package-lock-json/semver-calc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/content/posts/solving-conflicts-in-package-lock-json/semver-calc.png -------------------------------------------------------------------------------- /content/posts/status-checks-in-react-query/status-checks.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/content/posts/status-checks-in-react-query/status-checks.jpeg -------------------------------------------------------------------------------- /content/posts/testing-react-query/testing.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/content/posts/testing-react-query/testing.jpeg -------------------------------------------------------------------------------- /content/posts/the-beauty-of-tan-stack-router/beauty.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/content/posts/the-beauty-of-tan-stack-router/beauty.jpg -------------------------------------------------------------------------------- /content/posts/the-power-of-const-assertions/power.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/content/posts/the-power-of-const-assertions/power.jpg -------------------------------------------------------------------------------- /content/posts/the-query-options-api/ponder.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/content/posts/the-query-options-api/ponder.jpg -------------------------------------------------------------------------------- /content/posts/the-uphill-battle-of-memoization/uphill.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/content/posts/the-uphill-battle-of-memoization/uphill.png -------------------------------------------------------------------------------- /content/posts/things-to-know-about-use-state/use-state-pitfalls.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/content/posts/things-to-know-about-use-state/use-state-pitfalls.png -------------------------------------------------------------------------------- /content/posts/thinking-in-react-query/index.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: Thinking in React Query 3 | description: In this talk, we will learn how a different mindset can help us understand React Query and work with it efficiently. 4 | date: 2023-06-07 5 | banner: ./thinking.png 6 | tags: 7 | - ReactJs 8 | - React Query 9 | - Talk 10 | - TypeScript 11 | - JavaScript 12 | --- 13 | 14 | import Comments from 'components/Comments' 15 | import Translations from 'components/Translations' 16 | import { Presentation } from 'components/thinking-in-react-query' 17 | import { RqToc } from 'components/rq-toc' 18 | 19 | thinking people 20 | 21 | 22 | 23 | 24 | {[ 25 | { 26 | language: '한국어', 27 | url: 'https://velog.io/@seungchan__y/React-Query-%EC%A0%81%EC%9C%BC%EB%A1%9C-%EC%82%AC%EA%B3%A0%ED%95%98%EA%B8%B0', 28 | }, 29 | ]} 30 | 31 | 32 | Today's article comes in a different form: it's the slides + transcript from a talk I recently gave at a meetup in Vienna, as well as on the remote day of [React Summit](https://reactsummit.com/). You can swipe left or right or use the arrow buttons / arrow keys to switch between the slides. You can also find the recording on [the GitNation site](https://gitnation.com/contents/thinking-in-react-query). Enjoy! 33 | 34 |
35 | 36 | 37 | 38 | --- 39 | 40 | That's it for today. Feel free to reach out to me on [bluesky](https://bsky.app/profile/tkdodo.eu) 41 | if you have any questions, or just leave a comment below. ⬇️ 42 | 43 | 44 | -------------------------------------------------------------------------------- /content/posts/thinking-in-react-query/thinking.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/content/posts/thinking-in-react-query/thinking.png -------------------------------------------------------------------------------- /content/posts/type-safe-react-query/type-safe.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/content/posts/type-safe-react-query/type-safe.jpeg -------------------------------------------------------------------------------- /content/posts/use-state-for-one-time-initializations/use-state-pitfalls.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/content/posts/use-state-for-one-time-initializations/use-state-pitfalls.png -------------------------------------------------------------------------------- /content/posts/use-state-vs-use-reducer/usestate-vs-usereducer.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/content/posts/use-state-vs-use-reducer/usestate-vs-usereducer.jpeg -------------------------------------------------------------------------------- /content/posts/use-urgency/index.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: Use Urgency 3 | description: Getting huge refactorings going is not an easy task, but urgency can help here. 4 | date: 2022-03-25 5 | banner: ./urgency.jpeg 6 | tags: 7 | - principles 8 | - road to refactoring 9 | --- 10 | 11 | import Comments from 'components/Comments' 12 | import Highlight from 'components/Highlight' 13 | import Attribution from 'components/Attribution' 14 | import Translations from 'components/Translations' 15 | 16 | Urgency 17 | 18 | 19 | 20 | - [#1: Don't mix refactorings with hotfixes](road-to-refactoring) 21 | - [#2: Always provide customer value](always-provide-customer-value) 22 | - #3: Use Urgency 23 | - [#4: Refactor impactfully](refactor-impactfully) 24 | 25 | {[]} 26 | 27 | Huge refactorings are not an easy project to successfully complete. It's the ones that touch upon the base architecture of your product. They likely take a long time, and don't provide any _immediate_ customer value - the value is mostly _indirect_. 28 | 29 | What makes them so hard is often not the technical difficulties. Yes, we need to figure out how to replace / update / rewrite certain things. But let's be honest - that's what engineers are good at, and we've likely already thought about this for quite some time before we even bring it up. 30 | 31 | In larger organizations, this is mostly a _people_ problem. Since there is no immediate value, why should we do it? Could we not just add feature X to the product instead? Customers would love to have that... 32 | 33 | Someone has to give you the green light to go ahead with an operation like that, so you have to get everyone on board with the problem. A surprisingly effective way to do that is via urgency. 34 | 35 | ## Leverage Urgency 36 | 37 |
38 | With high urgency comes high priority 39 | 40 | I once worked on a project that had some page loading performance problems. We knew what the problem was, but it was very hard to fix with the current architecture. We got into the situation because we added new features left and right, and some of them didn't play nicely together. It worked well for most cases, but when it didn't work, it was really bad (=slow). 41 | 42 | When this was reported by customers for the first time, we had an all-hands-on-deck situation. Luckily, we could quickly work around the problem for the time being. After the dust has settled, we proposed a big architectural refactoring to eliminate the problem altogether, and everyone agreed to get started ASAP. 43 | 44 | The key is that we knew about the problematic part before the incident, and that we knew that it could theoretically get bad. But proposing a big investment into rewriting that area made no sense to anyone outside the core engineering team, because it was working "well enough". Without something urgent, it just wasn't enough of a priority. We really needed that one incident to outline the severity of the problem and align everyone on the fact that we need to invest into fixing this. 45 | 46 | ### A small window 47 | 48 | It doesn't always have to be a customer facing incident that highlights the severity. Maybe you're using a deprecated library or API that is about to be removed. Or you're planning on adding new features, and it absolutely cannot be done with the current tech stack. Something "security related" also usually sells very well. 49 | 50 | Whatever driver you may find - make sure to use the moment wisely to communicate what needs to be done. Once the urgency is gone, you might have missed your window of opportunity to tackle something big. 51 | 52 | --- 53 | 54 | That's it for today. Feel free to reach out to me on [bluesky](https://bsky.app/profile/tkdodo.eu) 55 | if you have any questions, or just leave a comment below. ⬇️ 56 | 57 | 58 | -------------------------------------------------------------------------------- /content/posts/use-urgency/urgency.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/content/posts/use-urgency/urgency.jpeg -------------------------------------------------------------------------------- /content/posts/using-web-sockets-with-react-query/react-query-websockets.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/content/posts/using-web-sockets-with-react-query/react-query-websockets.jpeg -------------------------------------------------------------------------------- /content/posts/why-i-dont-like-reduce/swiss-knife.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/content/posts/why-i-dont-like-reduce/swiss-knife.png -------------------------------------------------------------------------------- /content/posts/why-react-isnt-dying/dying.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/content/posts/why-react-isnt-dying/dying.jpeg -------------------------------------------------------------------------------- /content/posts/why-react-isnt-dying/growth-loop.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/content/posts/why-react-isnt-dying/growth-loop.png -------------------------------------------------------------------------------- /content/posts/why-you-want-react-query/race.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/content/posts/why-you-want-react-query/race.png -------------------------------------------------------------------------------- /content/posts/why-you-want-react-query/this_is_fine.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/content/posts/why-you-want-react-query/this_is_fine.jpg -------------------------------------------------------------------------------- /content/posts/why-you-want-react-query/want.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/content/posts/why-you-want-react-query/want.jpg -------------------------------------------------------------------------------- /content/posts/working-with-zustand/bear.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/content/posts/working-with-zustand/bear.jpeg -------------------------------------------------------------------------------- /content/posts/you-might-not-need-react-query/tradeoffs.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/content/posts/you-might-not-need-react-query/tradeoffs.jpeg -------------------------------------------------------------------------------- /content/posts/you-might-not-need-react-query/trees.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/content/posts/you-might-not-need-react-query/trees.jpeg -------------------------------------------------------------------------------- /content/posts/zustand-and-react-context/zustand-context.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/content/posts/zustand-and-react-context/zustand-context.jpg -------------------------------------------------------------------------------- /gatsby-node.js: -------------------------------------------------------------------------------- 1 | const path = require('path') 2 | 3 | exports.onCreateWebpackConfig = ({ actions }) => { 4 | actions.setWebpackConfig({ 5 | resolve: { 6 | modules: [path.resolve(__dirname, 'src'), 'node_modules'], 7 | }, 8 | }) 9 | } 10 | -------------------------------------------------------------------------------- /gatsby-ssr.js: -------------------------------------------------------------------------------- 1 | import { jsx } from 'theme-ui' 2 | import * as React from 'react' 3 | import { withPrefix } from 'gatsby' 4 | 5 | const noFlashDark = `(function () { 6 | try { 7 | var hasLocalStorage = localStorage.getItem('theme-ui-color-mode'); 8 | 9 | if ( 10 | window.matchMedia('(prefers-color-scheme: dark)').matches 11 | ) { 12 | document.querySelector('html').setAttribute('data-theme', 'dark') 13 | if (!hasLocalStorage) { 14 | document.documentElement.classList.add('theme-ui-dark') 15 | window.addEventListener('load', () => { 16 | document.documentElement.classList.remove('theme-ui-dark') 17 | }); 18 | } 19 | } 20 | } catch (err) {} 21 | })();` 22 | 23 | export const onRenderBody = ({ setPreBodyComponents }) => { 24 | setPreBodyComponents([ 25 | jsx('script', { 26 | key: 'theme-ui-no-flash-dark', 27 | dangerouslySetInnerHTML: { 28 | __html: noFlashDark, 29 | }, 30 | }), 31 | ]) 32 | } 33 | 34 | const fontUrl = `${withPrefix('fonts/Inter.woff2')}` 35 | const font = `@font-face{font-family:'Inter';font-style:normal;font-weight:100;font-display:block;src:url(${fontUrl}) format('woff2');}@font-face{font-family:'Inter';font-style:normal;font-weight:200;font-display:block;src:url(${fontUrl}) format('woff2');}@font-face{font-family:'Inter';font-style:normal;font-weight:300;font-display:block;src:url(${fontUrl}) format('woff2');}@font-face{font-family:'Inter';font-style:normal;font-weight:400;font-display:block;src:url(${fontUrl}) format('woff2');}@font-face{font-family:'Inter';font-style:normal;font-weight:500;font-display:block;src:url(${fontUrl}) format('woff2');}@font-face{font-family:'Inter';font-style:normal;font-weight:600;font-display:block;src:url(${fontUrl}) format('woff2');}@font-face{font-family:'Inter';font-style:normal;font-weight:700;font-display:block;src:url(${fontUrl}) format('woff2');}@font-face{font-family:'Inter';font-style:normal;font-weight:800;font-display:block;src:url(${fontUrl}) format('woff2');}@font-face{font-family:'Inter';font-style:normal;font-weight:900;font-display:block;src:url(${fontUrl}) format('woff2');}` 36 | const codeFontItalicUrl = `${withPrefix( 37 | 'fonts/MonoLisaVariableItalic.woff2' 38 | )}` 39 | const codeFontNormalUrl = `${withPrefix( 40 | 'fonts/MonoLisaVariableNormal.woff2' 41 | )}` 42 | const fontMl = `@font-face{font-family:'ml';font-style:normal;src:url(${codeFontNormalUrl}) format('woff2');}@font-face{font-family:'ml';font-style:italic;src:url(${codeFontItalicUrl}) format('woff2');}` 43 | 44 | const strikeThroughCss = `.strikeThrough::after{content:"";position:absolute;height:0.15em;background:var(--theme-ui-colors-danger);margin:auto;margin-top:0.65em;-webkit-transform:rotate(-3deg);-moz-transform:rotate(-3deg);-ms-transform:rotate(-3deg);transform:rotate(-3deg);inset:0;}` 45 | 46 | export const onPreRenderHTML = ({ 47 | getHeadComponents, 48 | replaceHeadComponents, 49 | }) => { 50 | const components = [ 51 | React.createElement('link', { 52 | key: 'font-inter', 53 | rel: 'preload', 54 | href: fontUrl, 55 | as: 'font', 56 | type: 'font/woff2', 57 | crossOrigin: 'anonymous', 58 | }), 59 | React.createElement('style', { 60 | key: 'font-face.inter', 61 | dangerouslySetInnerHTML: { 62 | __html: font, 63 | }, 64 | }), 65 | React.createElement('link', { 66 | key: 'font-ml', 67 | rel: 'preload', 68 | href: codeFontNormalUrl, 69 | as: 'font', 70 | type: 'font/woff2', 71 | crossOrigin: 'anonymous', 72 | }), 73 | React.createElement('link', { 74 | key: 'font-ml-italic', 75 | rel: 'preload', 76 | href: codeFontItalicUrl, 77 | as: 'font', 78 | type: 'font/woff2', 79 | crossOrigin: 'anonymous', 80 | }), 81 | React.createElement('style', { 82 | key: 'font-face.ml', 83 | dangerouslySetInnerHTML: { 84 | __html: fontMl, 85 | }, 86 | }), 87 | React.createElement('style', { 88 | key: 'strike-through', 89 | dangerouslySetInnerHTML: { 90 | __html: strikeThroughCss, 91 | }, 92 | }), 93 | ...getHeadComponents(), 94 | ] 95 | 96 | replaceHeadComponents(components) 97 | } 98 | -------------------------------------------------------------------------------- /netlify.toml: -------------------------------------------------------------------------------- 1 | [[redirects]] 2 | from = "/" 3 | to = "/blog" 4 | status = 301 5 | 6 | [[redirects]] 7 | from = "/images/*" 8 | to = "/blog/images/:splat" 9 | status = 301 10 | 11 | [[redirects]] 12 | from = "/js/script.js" 13 | to = "https://plausible.io/js/plausible.js" 14 | status = 200 15 | 16 | [[redirects]] 17 | from = "/api/event" 18 | to = "https://plausible.io/api/event" 19 | status = 202 20 | 21 | [[redirects]] 22 | from = "/query" 23 | to = "https://github.com/TkDodo/react-query-beyond-the-basics" 24 | status = 301 25 | force = true -------------------------------------------------------------------------------- /og-image.tsx: -------------------------------------------------------------------------------- 1 | import * as path from 'path' 2 | import OgImage from './src/components/OgImage' 3 | import * as React from 'react' 4 | import { join } from 'path' 5 | import * as fs from 'fs' 6 | const matter = require('gray-matter') 7 | const sharp = require('sharp') 8 | import satori from 'satori' 9 | 10 | const getOutputType = (banner: string) => { 11 | if (banner.endsWith('.png')) { 12 | return 'png' 13 | } 14 | if (banner.endsWith('.jpg') || banner.endsWith('.jpeg')) { 15 | return 'jpeg' 16 | } 17 | } 18 | 19 | const baseDirectory = join(__dirname, 'content', 'posts') 20 | 21 | const files = fs.readdirSync(baseDirectory) 22 | 23 | async function run() { 24 | for (const file of files) { 25 | const filePath = path.join(baseDirectory, file) 26 | const isDirectory = fs.statSync(filePath).isDirectory() 27 | if (isDirectory) { 28 | await convert(file) 29 | } 30 | } 31 | } 32 | 33 | async function convert(slug: string) { 34 | // Read the content of the MDX file 35 | const mdxContent = fs.readFileSync( 36 | join(__dirname, 'content', 'posts', slug, 'index.mdx'), 37 | 'utf8' 38 | ) 39 | 40 | // Use gray-matter to parse frontmatter 41 | const { data } = matter(mdxContent) 42 | 43 | // Print the frontmatter 44 | console.log('Frontmatter:', data) 45 | 46 | const banner = fs.readFileSync( 47 | join(__dirname, 'content', 'posts', slug, data.banner) 48 | ) 49 | 50 | const metadata = await sharp(Buffer.from(banner)).metadata() 51 | 52 | const resizeProps = 53 | metadata.width > metadata.height 54 | ? { 55 | width: 700, 56 | } 57 | : { height: 500 } 58 | 59 | const resizedBanner = await sharp(banner) 60 | .resize({ 61 | ...resizeProps, 62 | withoutEnlargement: true, 63 | }) 64 | .toBuffer() 65 | 66 | const base64Banner = Buffer.from(resizedBanner).toString('base64') 67 | const outputType = getOutputType(data.banner) 68 | 69 | // console.log(`data:image/${outputType};base64,${base64Banner}`) 70 | 71 | const resizedMetaData = await sharp( 72 | Buffer.from(resizedBanner) 73 | ).metadata() 74 | 75 | const svg = await satori( 76 | , 84 | { 85 | width: 1200, 86 | height: 630, 87 | fonts: [ 88 | { 89 | name: 'Inter', 90 | // Use `fs` (Node.js only) or `fetch` to read the font as Buffer/ArrayBuffer and provide `data` here. 91 | data: fs.readFileSync( 92 | join(__dirname, 'static', 'fonts', 'Inter-Regular.woff') 93 | ), 94 | weight: 400, 95 | style: 'normal', 96 | }, 97 | ], 98 | } 99 | ) 100 | 101 | const outputPath = join( 102 | __dirname, 103 | 'static', 104 | 'og-images', 105 | `${slug}.png` 106 | ) 107 | 108 | // Convert SVG to PNG 109 | sharp(Buffer.from(svg)) 110 | .png({ 111 | compressionLevel: 9, 112 | adaptiveFiltering: true, 113 | force: true, 114 | }) 115 | .toFile(outputPath, (err, info) => { 116 | if (err) { 117 | console.error(err) 118 | } else { 119 | console.log('Image saved successfully:', info) 120 | } 121 | }) 122 | } 123 | 124 | try { 125 | run() 126 | } catch (e) { 127 | console.error(e) 128 | } 129 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "private": true, 3 | "name": "minimal-blog", 4 | "description": "Typography driven, feature-rich blogging theme with minimal aesthetics. Includes tags/categories support and extensive features for code blocks such as live preview, line numbers, and line highlighting.", 5 | "version": "1.2.0", 6 | "author": "LekoArts ", 7 | "license": "MIT", 8 | "starter-name": "gatsby-starter-minimal-blog", 9 | "scripts": { 10 | "build": "gatsby clean && gatsby build --prefix-paths", 11 | "develop": "gatsby develop", 12 | "start": "rm -rf .cache && gatsby develop", 13 | "serve": "gatsby serve --prefix-paths", 14 | "clean": "gatsby clean", 15 | "ogimages": "bun run ./og-image.tsx", 16 | "postbuild": "mv public build && mkdir public && mv build public/blog", 17 | "postinstall": "patch-package" 18 | }, 19 | "dependencies": { 20 | "@devular/gatsby-plugin-plausible": "^0.1.8", 21 | "@docsearch/react": "3.0.0-alpha.41", 22 | "@giscus/react": "^2.0.2", 23 | "@lekoarts/gatsby-theme-minimal-blog": "^4.1.4", 24 | "@loadable/component": "^5.15.2", 25 | "gatsby": "^4.25.7", 26 | "gatsby-plugin-feed": "^4.7.0", 27 | "gatsby-plugin-image": "^2.21.0", 28 | "gatsby-plugin-manifest": "^4.7.0", 29 | "gatsby-plugin-offline": "^5.7.0", 30 | "gatsby-plugin-scroll-indicator": "^1.0.1", 31 | "gatsby-plugin-sharp": "^4.21.0", 32 | "gatsby-plugin-sitemap": "^5.7.0", 33 | "gatsby-plugin-webpack-bundle-analyser-v2": "^1.1.26", 34 | "gatsby-remark-autolink-headers": "^5.7.0", 35 | "gatsby-remark-external-links": "^0.0.4", 36 | "gatsby-transformer-remark": "^5.7.0", 37 | "gray-matter": "^4.0.3", 38 | "patch-package": "^6.4.7", 39 | "prettier": "2.3.1", 40 | "react": "^17.0.2", 41 | "react-dom": "^17.0.2", 42 | "react-gif-player": "^0.4.2", 43 | "react-spring": "^9.7.1", 44 | "react-spring-carousel": "^2.0.19", 45 | "satori": "^0.10.9", 46 | "sharp": "^0.32.6", 47 | "typescript": "4.3.4" 48 | }, 49 | "devDependencies": { 50 | "cross-env": "^7.0.3" 51 | }, 52 | "prettier": { 53 | "printWidth": 70, 54 | "tabWidth": 2, 55 | "singleQuote": true, 56 | "semi": false 57 | } 58 | } 59 | -------------------------------------------------------------------------------- /patches/@devular+gatsby-plugin-plausible+0.1.8.patch: -------------------------------------------------------------------------------- 1 | diff --git a/node_modules/@devular/gatsby-plugin-plausible/gatsby-ssr.js b/node_modules/@devular/gatsby-plugin-plausible/gatsby-ssr.js 2 | index da958f6..6974d46 100644 3 | --- a/node_modules/@devular/gatsby-plugin-plausible/gatsby-ssr.js 4 | +++ b/node_modules/@devular/gatsby-plugin-plausible/gatsby-ssr.js 5 | @@ -49,7 +49,7 @@ exports.onRenderBody = function (_ref, pluginOptions) { 6 | var scriptProps = { 7 | async: true, 8 | defer: true, 9 | - domain: domain, 10 | + 'data-domain': domain, 11 | src: proxyScript || "https://" + plausibleDomain + scriptURI 12 | }; 13 | 14 | -------------------------------------------------------------------------------- /patches/@lekoarts+gatsby-theme-minimal-blog-core+4.1.4.patch: -------------------------------------------------------------------------------- 1 | diff --git a/node_modules/@lekoarts/gatsby-theme-minimal-blog-core/src/templates/tag-query.tsx b/node_modules/@lekoarts/gatsby-theme-minimal-blog-core/src/templates/tag-query.tsx 2 | index 0c74e61..d13a488 100755 3 | --- a/node_modules/@lekoarts/gatsby-theme-minimal-blog-core/src/templates/tag-query.tsx 4 | +++ b/node_modules/@lekoarts/gatsby-theme-minimal-blog-core/src/templates/tag-query.tsx 5 | @@ -17,6 +17,15 @@ export const query = graphql` 6 | name 7 | slug 8 | } 9 | + banner { 10 | + childImageSharp { 11 | + resize(width: 300, height: 200, quality: 90) { 12 | + src 13 | + width 14 | + height 15 | + } 16 | + } 17 | + } 18 | } 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /src/@lekoarts/gatsby-theme-minimal-blog/components/DocSearch.tsx: -------------------------------------------------------------------------------- 1 | import * as React from 'react' 2 | import { DocSearch as AlogliaDocSearch } from '@docsearch/react' 3 | import { useColorMode } from 'theme-ui' 4 | 5 | import '@docsearch/css' 6 | 7 | const DocSearch = () => { 8 | const [colorMode] = useColorMode() 9 | 10 | React.useEffect(() => { 11 | document.querySelector('html').setAttribute('data-theme', colorMode) 12 | }, [colorMode]) 13 | 14 | return ( 15 | 20 | ) 21 | } 22 | 23 | export default DocSearch 24 | -------------------------------------------------------------------------------- /src/@lekoarts/gatsby-theme-minimal-blog/components/blog.tsx: -------------------------------------------------------------------------------- 1 | import * as React from 'react' 2 | import OriginalBlog from '@lekoarts/gatsby-theme-minimal-blog/src/components/blog' 3 | import { useStaticQuery, graphql } from 'gatsby' 4 | 5 | const query = graphql` 6 | query { 7 | allPost(sort: { fields: date, order: DESC }) { 8 | nodes { 9 | slug 10 | title 11 | date(formatString: "DD.MM.YYYY") 12 | timeToRead 13 | description 14 | tags { 15 | name 16 | slug 17 | } 18 | banner { 19 | childImageSharp { 20 | resize(width: 300, height: 200, quality: 90) { 21 | src 22 | width 23 | height 24 | } 25 | } 26 | } 27 | } 28 | } 29 | } 30 | ` 31 | 32 | const Homepage = (props: React.ComponentProps) => { 33 | const data = useStaticQuery(query) 34 | return 35 | } 36 | 37 | export default Homepage 38 | -------------------------------------------------------------------------------- /src/@lekoarts/gatsby-theme-minimal-blog/components/header-title.tsx: -------------------------------------------------------------------------------- 1 | import * as React from 'react' 2 | import OriginalHeaderTitle from '@lekoarts/gatsby-theme-minimal-blog/src/components/header-title' 3 | import { Flex } from '@theme-ui/components' 4 | 5 | import DocSearch from './DocSearch' 6 | 7 | const HeaderTitle = ( 8 | props: React.ComponentProps 9 | ) => { 10 | return ( 11 | 12 | 13 | 14 | 15 | ) 16 | } 17 | 18 | export default HeaderTitle 19 | -------------------------------------------------------------------------------- /src/@lekoarts/gatsby-theme-minimal-blog/components/homepage.tsx: -------------------------------------------------------------------------------- 1 | import * as React from 'react' 2 | import OriginalHomePage from '@lekoarts/gatsby-theme-minimal-blog/src/components/homepage' 3 | import { useStaticQuery, graphql } from 'gatsby' 4 | 5 | const query = graphql` 6 | query { 7 | allPost(sort: { fields: date, order: DESC }, limit: 6) { 8 | nodes { 9 | slug 10 | title 11 | date(formatString: "DD.MM.YYYY") 12 | timeToRead 13 | description 14 | tags { 15 | name 16 | slug 17 | } 18 | banner { 19 | childImageSharp { 20 | resize(width: 300, height: 200, quality: 90) { 21 | src 22 | width 23 | height 24 | } 25 | } 26 | } 27 | } 28 | } 29 | } 30 | ` 31 | 32 | const Homepage = (props: React.ComponentProps) => { 33 | const data = useStaticQuery(query) 34 | return ( 35 | 36 | ) 37 | } 38 | 39 | export default Homepage 40 | -------------------------------------------------------------------------------- /src/@lekoarts/gatsby-theme-minimal-blog/components/listing.tsx: -------------------------------------------------------------------------------- 1 | /** @jsx jsx */ 2 | import ItemTags from '@lekoarts/gatsby-theme-minimal-blog/src/components/item-tags' 3 | import * as React from 'react' 4 | import OriginalListing from '@lekoarts/gatsby-theme-minimal-blog/src/components/listing' 5 | import OriginalBlogListLitem from '@lekoarts/gatsby-theme-minimal-blog/src/components/blog-list-item' 6 | import { Link, withPrefix } from 'gatsby' 7 | 8 | import { Image, Card, Grid } from '@theme-ui/components' 9 | import { jsx } from 'theme-ui' 10 | 11 | import { Del } from '../../../components/Del' 12 | 13 | const Listing = ( 14 | props: React.ComponentProps 15 | ) => { 16 | return ( 17 |
18 | 25 | {props.posts.map((post) => ( 26 | 31 | ))} 32 | 33 |
34 | ) 35 | } 36 | 37 | export default Listing 38 | 39 | type BannerProps = { 40 | post: React.ComponentProps['post'] & { 41 | banner?: { 42 | childImageSharp: { 43 | resize: { 44 | src: string 45 | width: number 46 | height: number 47 | } 48 | } 49 | } 50 | } 51 | } 52 | 53 | const CardListItem = ({ 54 | showTags = true, 55 | post, 56 | }: Omit, 'post'> & 57 | BannerProps) => { 58 | const image = post.banner?.childImageSharp.resize 59 | 60 | return ( 61 | ({ 63 | maxWidth: '320px', 64 | borderRadius: '12px', 65 | border: '2px solid transparent', 66 | padding: '8px', 67 | '&:hover, &:active, &:focus': { 68 | border: `2px solid ${t.colors.primary}`, 69 | }, 70 | '@media (prefers-reduced-motion: no-preference)': { 71 | transition: 72 | 'border 150ms ease-in, transform 0.8s cubic-bezier(0.34, 1.56, 0.64, 1),box-shadow 0.8s cubic-bezier(0.34, 1.56, 0.64, 1)', 73 | '&:hover': { 74 | transform: 'translate3d(0, -8px, 0)', 75 | }, 76 | }, 77 | })} 78 | > 79 | {image && ( 80 | 81 | {post.title} 89 | 90 | )} 91 |

99 | ,{' '} 100 | {post.timeToRead && <>{post.timeToRead} min read} 101 |

102 |

103 | ({ 106 | ...t.styles?.a, 107 | fontSize: [1, 2, 3], 108 | color: `text`, 109 | '&:hover, &:active, &:focus': { 110 | textDecoration: 'none', 111 | }, 112 | })} 113 | > 114 | {post.title === 'Why You Want React Query' ? ( 115 | <> 116 | Why You Want Need React Query 117 | 118 | ) : ( 119 | post.title 120 | )} 121 | 122 |

123 | {post.tags && showTags && ( 124 |

132 | 133 |

134 | )} 135 |
136 | ) 137 | } 138 | -------------------------------------------------------------------------------- /src/@lekoarts/gatsby-theme-minimal-blog/components/post.tsx: -------------------------------------------------------------------------------- 1 | import * as React from 'react' 2 | import OriginalPost from '@lekoarts/gatsby-theme-minimal-blog/src/components/post' 3 | 4 | const Post = (props: React.ComponentProps) => { 5 | const newProps = { 6 | ...props, 7 | data: { 8 | ...props.data, 9 | post: { 10 | ...props.data.post, 11 | banner: { 12 | childImageSharp: { 13 | resize: { 14 | src: `/og-images${props.data.post.slug}.png`, 15 | }, 16 | }, 17 | }, 18 | }, 19 | }, 20 | } 21 | 22 | return 23 | } 24 | 25 | export default Post 26 | -------------------------------------------------------------------------------- /src/@lekoarts/gatsby-theme-minimal-blog/styles/code.ts: -------------------------------------------------------------------------------- 1 | import baseCode from '@lekoarts/gatsby-theme-minimal-blog/src/styles/code' 2 | 3 | export default { 4 | pre: { 5 | fontFamily: 'ml, monospace', 6 | }, 7 | '.react-live-wrapper > *': { 8 | fontFamily: 'ml, monospace !important', 9 | }, 10 | code: { 11 | fontFamily: 'ml, monospace', 12 | }, 13 | 'pre[class~="language-java"]:before': { 14 | content: `"scala"`, 15 | background: `#dc322f !important`, 16 | color: `white !important`, 17 | }, 18 | 'pre[class~="language-kt"]:before': { 19 | content: `"KT"`, 20 | 21 | background: `#806EE3 !important`, 22 | }, 23 | 'pre[class~="language-groovy"]:before': { 24 | content: `"GROOVY"`, 25 | background: `#629CBC !important`, 26 | }, 27 | ...baseCode, 28 | '.gatsby-highlight': { 29 | // @ts-expect-error this is an object 30 | ...baseCode['.gatsby-highlight'], 31 | mx: 0, 32 | borderBottomLeftRadius: '0.5rem', 33 | borderBottomRightRadius: '0.5rem', 34 | }, 35 | '.code-title': { 36 | // @ts-expect-error this is an object 37 | ...baseCode['.code-title'], 38 | fontSize: [0, 1], 39 | fontFamily: 'ml, monospace', 40 | borderTopLeftRadius: '0.5rem', 41 | borderTopRightRadius: '0.5rem', 42 | mx: 0, 43 | }, 44 | '.prism-code': { 45 | // @ts-expect-error this is an object 46 | ...baseCode['.prism-code'], 47 | fontSize: [0, 1, 1], 48 | borderBottomLeftRadius: '0.5rem', 49 | borderBottomRightRadius: '0.5rem', 50 | }, 51 | 'p > code, li > code': { 52 | bg: `backgroundSecondary`, 53 | color: `text`, 54 | padding: ['0.18rem 0.3rem', '0.18rem 0.3rem', '0.18rem 0.3rem'], 55 | borderRadius: `6px`, 56 | fontSize: `90%`, 57 | }, 58 | } 59 | -------------------------------------------------------------------------------- /src/@lekoarts/gatsby-theme-minimal-blog/texts/About.tsx: -------------------------------------------------------------------------------- 1 | import * as React from 'react' 2 | import { Link, Box, Grid } from 'theme-ui' 3 | 4 | const About = () => ( 5 | 6 | 15 | 20 | TkDodo 29 | 30 | 37 |

Hi 👋, I'm Dominik from Vienna 🇦🇹

38 |

39 | I'm a Web Developer and open source maintainer who ❤️ 40 | ReactJs and TypeScript. I'm currently maintaining{' '} 41 | 46 | TanStack/query 47 | {' '} 48 | and{' '} 49 | 54 | TanStack/router 55 | 56 | . 57 |

58 |
59 |
60 | 61 | Welcome to my personal blog 📚, where I write about all things 62 | React, TypeScript and of course the{' '} 63 | 68 | TanStack 69 | 70 | . If you enjoy my blog posts or want to support my open source 71 | work, you can{' '} 72 | 78 | 🎗 sponsor me on Github 🎗 79 | 80 | 81 |
82 | ) 83 | 84 | export default About 85 | -------------------------------------------------------------------------------- /src/@lekoarts/gatsby-theme-minimal-blog/texts/bottom.mdx: -------------------------------------------------------------------------------- 1 | import PremiumSponsors from 'components/PremiumSponsors' 2 | 3 | ## Premium Sponsors 4 | 5 |
6 | 7 | 8 | -------------------------------------------------------------------------------- /src/@lekoarts/gatsby-theme-minimal-blog/texts/hero.mdx: -------------------------------------------------------------------------------- 1 | import About from './About' 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/components/Ads.tsx: -------------------------------------------------------------------------------- 1 | import * as React from 'react' 2 | 3 | const injectScript = (src: string, id: string, onload: () => void) => { 4 | const script = document.createElement('script') 5 | 6 | script.async = true 7 | script.id = id 8 | script.src = src 9 | 10 | script.addEventListener('load', onload) 11 | 12 | document.head.append(script) 13 | 14 | return () => { 15 | script.removeEventListener('load', onload) 16 | script.remove() 17 | } 18 | } 19 | 20 | const Ads = () => { 21 | React.useEffect(() => { 22 | return injectScript( 23 | 'https://media.ethicalads.io/media/client/ethicalads.min.js', 24 | 'ethical-ads', 25 | () => { 26 | ;(window as any).ethicalads?.load() 27 | } 28 | ) 29 | }, []) 30 | 31 | return ( 32 |
40 | ) 41 | } 42 | 43 | export default Ads 44 | -------------------------------------------------------------------------------- /src/components/Aside.tsx: -------------------------------------------------------------------------------- 1 | import Emph from './Emph' 2 | import * as React from 'react' 3 | import { Box, Flex } from 'theme-ui' 4 | 5 | type Props = { 6 | children: React.ReactNode 7 | title: string 8 | icon?: keyof typeof icons 9 | color?: string 10 | } 11 | 12 | const Svg = ({ children }: { children: React.ReactNode }) => ( 13 | 24 | {children} 25 | 26 | ) 27 | 28 | const Bell = () => ( 29 | 30 | 31 | 32 | 33 | ) 34 | 35 | const Info = () => ( 36 | 37 | 38 | 39 | 40 | 41 | ) 42 | 43 | const ShieldAlert = () => ( 44 | 45 | 46 | 47 | 48 | 49 | ) 50 | 51 | const icons = { 52 | bell: Bell, 53 | info: Info, 54 | 'shield-alert': ShieldAlert, 55 | } as const 56 | 57 | const Aside = ({ 58 | children, 59 | title, 60 | icon = 'info', 61 | color = 'var(--theme-ui-colors-primary)', 62 | }: Props) => { 63 | const Icon = icons[icon] 64 | return ( 65 | 89 | 96 | {title && {title}} 97 | 98 | 99 | {children} 100 | 101 | ) 102 | } 103 | 104 | export default Aside 105 | -------------------------------------------------------------------------------- /src/components/Attribution.tsx: -------------------------------------------------------------------------------- 1 | import * as React from 'react' 2 | import { Link } from '@theme-ui/components' 3 | 4 | import SmallCentered from './SmallCentered' 5 | 6 | type Props = { 7 | name: string 8 | url: string 9 | prefix?: string 10 | } 11 | 12 | const Attribution = ({ name, url, prefix = 'Photo by' }: Props) => ( 13 | <> 14 | 15 | {prefix}{' '} 16 | 17 | {name} 18 | 19 | 20 | 21 | ) 22 | 23 | export default Attribution 24 | -------------------------------------------------------------------------------- /src/components/Comments.tsx: -------------------------------------------------------------------------------- 1 | import * as React from 'react' 2 | import Giscus from '@giscus/react' 3 | import { StaticImage } from 'gatsby-plugin-image' 4 | import { useLocation } from '@reach/router' 5 | import { useColorMode } from 'theme-ui' 6 | import { Link, Flex } from '@theme-ui/components' 7 | import { QueryGG } from './QueryGG' 8 | 9 | import HighlightBox from './HighlightBox' 10 | import MonoLisa from './MonoLisa' 11 | 12 | const id = 'inject-comments' 13 | 14 | const Comments = () => { 15 | const [colorMode] = useColorMode() 16 | const [mounted, setMounted] = React.useState(false) 17 | 18 | React.useEffect(() => { 19 | setMounted(true) 20 | }, []) 21 | 22 | return mounted ? ( 23 | 37 | ) : null 38 | } 39 | 40 | const WithAds = () => { 41 | const location = useLocation() 42 | return ( 43 | 44 | 45 | 46 | 47 | {location.pathname.includes('query') && 48 | !location.pathname.includes('the-query-options-api') && 49 | !location.pathname.includes('why-you-want') ? ( 50 | 51 | ) : ( 52 | 57 | 62 | 63 | )} 64 | 65 | 66 | ) 67 | } 68 | 69 | export default WithAds 70 | -------------------------------------------------------------------------------- /src/components/Del.tsx: -------------------------------------------------------------------------------- 1 | import { Box } from '@theme-ui/components' 2 | import * as React from 'react' 3 | 4 | export const Del = ({ children }: { children: React.ReactNode }) => ( 5 | 6 | 21 | {children} 22 | 23 | 24 | ) 25 | -------------------------------------------------------------------------------- /src/components/Emph.tsx: -------------------------------------------------------------------------------- 1 | import * as React from 'react' 2 | import { Text, useColorMode } from 'theme-ui' 3 | import { tint } from '@theme-ui/color' 4 | 5 | type Props = { 6 | children: React.ReactNode 7 | color?: string 8 | } 9 | 10 | const Emph = ({ children, color = 'primary' }: Props) => { 11 | return ( 12 | 19 | {children} 20 | 21 | ) 22 | } 23 | 24 | export default Emph 25 | -------------------------------------------------------------------------------- /src/components/FixTitle.tsx: -------------------------------------------------------------------------------- 1 | import * as React from 'react' 2 | 3 | export const FixTitle = () => { 4 | React.useLayoutEffect(() => { 5 | document.querySelector('h1').innerHTML = 6 | 'Why You Want Need React Query' 7 | }, []) 8 | 9 | return null 10 | } 11 | -------------------------------------------------------------------------------- /src/components/GifPlayer.jsx: -------------------------------------------------------------------------------- 1 | import * as React from 'react' 2 | import Loadable from '@loadable/component' 3 | import 'react-gif-player/dist/gifplayer.css' 4 | import { withPrefix } from 'gatsby' 5 | 6 | const ReactGifPlayer = Loadable(() => import('react-gif-player')) 7 | 8 | const GifPlayer = ({ gif, still, ...props }) => ( 9 | 14 | ) 15 | 16 | export default GifPlayer 17 | -------------------------------------------------------------------------------- /src/components/Highlight.tsx: -------------------------------------------------------------------------------- 1 | import Emph from './Emph' 2 | import * as React from 'react' 3 | import { Box, useColorMode } from 'theme-ui' 4 | 5 | type Props = { 6 | children: React.ReactNode 7 | } 8 | 9 | const Highlight = ({ children }: Props) => { 10 | const [colorMode] = useColorMode() 11 | const color = colorMode === 'dark' ? 255 : 0 12 | return ( 13 | 26 | {children} 27 | 28 | ) 29 | } 30 | 31 | export default Highlight 32 | -------------------------------------------------------------------------------- /src/components/HighlightBox.tsx: -------------------------------------------------------------------------------- 1 | import * as React from 'react' 2 | import { Flex } from '@theme-ui/components' 3 | 4 | type Props = { 5 | children: React.ReactNode 6 | } 7 | 8 | const HighlightBox = ({ children }: Props) => { 9 | return ( 10 | 18 | {children} 19 | 20 | ) 21 | } 22 | 23 | export default HighlightBox 24 | -------------------------------------------------------------------------------- /src/components/MonoLisa.tsx: -------------------------------------------------------------------------------- 1 | import * as React from 'react' 2 | import { Box, Link } from 'theme-ui' 3 | 4 | const MonoLisa = () => { 5 | return ( 6 | 7 | Like the monospace font in the code blocks? 8 | 9 | Check out{' '} 10 | 15 | monolisa.dev 16 | 17 | 18 | 19 | ) 20 | } 21 | 22 | export default MonoLisa 23 | -------------------------------------------------------------------------------- /src/components/OgImage.tsx: -------------------------------------------------------------------------------- 1 | import * as React from 'react' 2 | 3 | type Props = { 4 | title: string 5 | img: { 6 | src: string 7 | width: number 8 | height: number 9 | } 10 | } 11 | 12 | const OgImage = ({ title, img }: Props) => { 13 | return ( 14 |
22 |
35 |
44 |
52 |
60 | {title} 61 |
62 |
71 | TkDodo 78 | by TkDodo 79 |
80 |
81 |
87 | 93 |
94 |
95 |
96 |
97 | ) 98 | } 99 | 100 | export default OgImage 101 | -------------------------------------------------------------------------------- /src/components/QueryGG.tsx: -------------------------------------------------------------------------------- 1 | import { StaticImage } from 'gatsby-plugin-image' 2 | import * as React from 'react' 3 | 4 | import { Link } from '@theme-ui/components' 5 | 6 | export const QueryGG = () => ( 7 | 12 | 17 | 18 | ) 19 | -------------------------------------------------------------------------------- /src/components/SmallCentered.tsx: -------------------------------------------------------------------------------- 1 | import * as React from 'react' 2 | import { Box, Divider, Link } from '@theme-ui/components' 3 | 4 | type Props = { 5 | children: React.ReactNode 6 | } 7 | 8 | const SmallCentered = ({ children }: Props) => ( 9 | 17 | {children} 18 | 19 | ) 20 | 21 | export default SmallCentered 22 | -------------------------------------------------------------------------------- /src/components/SpacingBox.tsx: -------------------------------------------------------------------------------- 1 | import * as React from 'react' 2 | import { Box } from '@theme-ui/components' 3 | 4 | const SpacingBox = () => ( 5 | 6 | {' '} 7 | 8 | ) 9 | 10 | export default SpacingBox 11 | -------------------------------------------------------------------------------- /src/components/Translations.tsx: -------------------------------------------------------------------------------- 1 | import * as React from 'react' 2 | import { Flex, Badge, Link } from '@theme-ui/components' 3 | 4 | import Ads from './Ads' 5 | import HighlightBox from './HighlightBox' 6 | 7 | type Props = { 8 | children: ReadonlyArray<{ language: string; url: string }> 9 | } 10 | 11 | const Translations = ({ children }: Props) => ( 12 | 21 | {children.length > 0 ? ( 22 | children.map(({ language, url }) => ( 23 | 24 | 30 | {language} 31 | 32 | 33 | )) 34 | ) : ( 35 | No translations available. 36 | )} 37 | 38 | 43 | Add translation 44 | 45 | 46 | 47 | ) 48 | 49 | const TranslationsWrapper = ({ children }: Props) => { 50 | return ( 51 | 52 | 53 | 54 | {children} 55 | 56 | 57 | ) 58 | } 59 | 60 | export default TranslationsWrapper 61 | -------------------------------------------------------------------------------- /src/components/TweetPoll.tsx: -------------------------------------------------------------------------------- 1 | import * as React from 'react' 2 | import { Box, Flex, Text } from '@theme-ui/components' 3 | 4 | type Props = { 5 | votes: string 6 | options: ReadonlyArray<{ 7 | id: string 8 | name: string 9 | percentage: string 10 | winner: boolean 11 | }> 12 | } 13 | 14 | export const TweetPoll = ({ options, votes }: Props) => { 15 | return ( 16 | 25 | {options.map(({ id, name, percentage, winner = false }) => ( 26 | 35 | 48 | 57 | {winner ? {name} : name} 58 | 59 | {percentage} 60 | 61 | ))} 62 | 69 | {votes} votes · Final results 70 | 71 | 72 | ) 73 | } 74 | -------------------------------------------------------------------------------- /src/components/VerticalRuler.tsx: -------------------------------------------------------------------------------- 1 | import { Box } from '@theme-ui/components' 2 | import * as React from 'react' 3 | 4 | export const VerticalRuler = ({ height }: { height: string }) => ( 5 | 16 | ) 17 | -------------------------------------------------------------------------------- /src/components/react-query-api-design-lessons-learned/slide.tsx: -------------------------------------------------------------------------------- 1 | import { withPrefix } from 'gatsby' 2 | import * as React from 'react' 3 | import { useColorMode } from 'theme-ui' 4 | 5 | import { Flex, Box, Text, Divider } from '@theme-ui/components' 6 | 7 | export const Slide = ({ children, index }) => { 8 | const [colorMode] = useColorMode() 9 | return ( 10 | 17 | 30 | 31 | 32 | {children} 33 | 34 | ) 35 | } 36 | -------------------------------------------------------------------------------- /src/components/react-query-the-bad-parts/slide.tsx: -------------------------------------------------------------------------------- 1 | import { withPrefix } from 'gatsby' 2 | import * as React from 'react' 3 | 4 | import { Flex, Box, Text, Divider } from '@theme-ui/components' 5 | 6 | export const Slide = ({ children, index }) => { 7 | return ( 8 | 15 | 26 | 27 | 28 | {children} 29 | 30 | ) 31 | } 32 | -------------------------------------------------------------------------------- /src/components/thinking-in-react-query/slide.tsx: -------------------------------------------------------------------------------- 1 | import { withPrefix } from 'gatsby' 2 | import * as React from 'react' 3 | 4 | import { Flex, Box, Text, Divider } from '@theme-ui/components' 5 | 6 | export const Slide = ({ children, index }) => ( 7 | 14 | 25 | 26 | 27 | {children} 28 | 29 | ) 30 | -------------------------------------------------------------------------------- /src/gatsby-plugin-theme-ui/index.js: -------------------------------------------------------------------------------- 1 | import baseTheme from '@lekoarts/gatsby-theme-minimal-blog/src/gatsby-plugin-theme-ui' 2 | 3 | const theme = { 4 | ...baseTheme, 5 | fontSizes: [ 6 | '0.875rem', 7 | '1rem', 8 | '1.125rem', 9 | '1.25rem', 10 | '1.5rem', 11 | '1.875rem', 12 | '2.25rem', 13 | '3rem', 14 | '4rem', 15 | '4.5rem', 16 | ], 17 | fonts: { 18 | ...baseTheme.fonts, 19 | body: 'Inter, -apple-system, BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji"', 20 | }, 21 | text: { 22 | ...baseTheme.text, 23 | default: { 24 | color: 'text', 25 | fontSize: [1, 1, 2], 26 | }, 27 | }, 28 | badges: { 29 | ...baseTheme.badges, 30 | outline: { 31 | color: 'primary', 32 | bg: 'transparent', 33 | borderRadius: '8px', 34 | paddingY: 2, 35 | boxShadow: 'inset 0 0 0 1px', 36 | }, 37 | }, 38 | space: [ 39 | baseTheme.space[0], 40 | baseTheme.space[1], 41 | baseTheme.space[2], 42 | baseTheme.space[3], 43 | baseTheme.space[4], 44 | baseTheme.space[5], 45 | baseTheme.space[6], 46 | baseTheme.space[6], 47 | baseTheme.space[6], 48 | ], 49 | useColorSchemeMediaQuery: true, 50 | alerts: { 51 | ...baseTheme.alerts, 52 | highlight: { 53 | color: 'background', 54 | bg: 'primary', 55 | }, 56 | primary: { 57 | color: 'background', 58 | }, 59 | }, 60 | colors: { 61 | ...baseTheme.colors, 62 | backgroundSecondary: 'var(--theme-ui-colors-gray-2)', 63 | backgroundTertiary: 'var(--theme-ui-colors-gray-3)', 64 | twitterBlue: '#1d9bf0', 65 | twitterPollBg: 'rgb(207, 217, 222)', 66 | twitterPollBgWinner: 'rgba(29, 155, 240, 0.58)', 67 | primary: '#387D6C', 68 | danger: 'var(--theme-ui-colors-red-6)', 69 | warning: 'var(--theme-ui-colors-yellow-7)', 70 | modes: { 71 | ...baseTheme.colors.modes, 72 | light: { 73 | ...baseTheme.colors.modes.light, 74 | // background: '#F5F5F5', 75 | }, 76 | dark: { 77 | ...baseTheme.colors.modes.dark, 78 | primary: '#76c2af', 79 | danger: 'var(--theme-ui-colors-red-7)', 80 | twitterPollBg: 'rgb(51, 54, 57)', 81 | backgroundSecondary: 'var(--theme-ui-colors-gray-8)', 82 | backgroundTertiary: 'var(--theme-ui-colors-gray-7)', 83 | warning: 'var(--theme-ui-colors-yellow-6)', 84 | }, 85 | }, 86 | }, 87 | styles: { 88 | ...baseTheme.styles, 89 | h1: { 90 | ...baseTheme.styles.h1, 91 | overflowWrap: 'break-word', 92 | }, 93 | h2: { 94 | ...baseTheme.styles.h2, 95 | overflowWrap: 'break-word', 96 | }, 97 | h3: { 98 | ...baseTheme.styles.h3, 99 | overflowWrap: 'break-word', 100 | }, 101 | h4: { 102 | ...baseTheme.styles.h4, 103 | overflowWrap: 'break-word', 104 | }, 105 | h5: { 106 | ...baseTheme.styles.h5, 107 | overflowWrap: 'break-word', 108 | }, 109 | h6: { 110 | ...baseTheme.styles.h6, 111 | overflowWrap: 'break-word', 112 | }, 113 | }, 114 | } 115 | 116 | export default theme 117 | -------------------------------------------------------------------------------- /static/apple-touch-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/apple-touch-icon.png -------------------------------------------------------------------------------- /static/blog-banner.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/blog-banner.png -------------------------------------------------------------------------------- /static/favicon-16x16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/favicon-16x16.png -------------------------------------------------------------------------------- /static/favicon-32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/favicon-32x32.png -------------------------------------------------------------------------------- /static/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/favicon.ico -------------------------------------------------------------------------------- /static/fonts/Inter-Regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/fonts/Inter-Regular.woff -------------------------------------------------------------------------------- /static/fonts/Inter.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/fonts/Inter.woff2 -------------------------------------------------------------------------------- /static/fonts/MonoLisaVariableItalic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/fonts/MonoLisaVariableItalic.woff2 -------------------------------------------------------------------------------- /static/fonts/MonoLisaVariableNormal.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/fonts/MonoLisaVariableNormal.woff2 -------------------------------------------------------------------------------- /static/images/1021430.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/1021430.jpeg -------------------------------------------------------------------------------- /static/images/EXx9RHYVAAUgegZ.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/EXx9RHYVAAUgegZ.jpeg -------------------------------------------------------------------------------- /static/images/FSJNvbJWUAIVEGB.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/FSJNvbJWUAIVEGB.jpeg -------------------------------------------------------------------------------- /static/images/FVegS4nXwAQHskN.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/FVegS4nXwAQHskN.jpeg -------------------------------------------------------------------------------- /static/images/Fcnj9l0XEAMnLdV.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/Fcnj9l0XEAMnLdV.jpeg -------------------------------------------------------------------------------- /static/images/FxnXEGVX0AEeYAf.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/FxnXEGVX0AEeYAf.jpeg -------------------------------------------------------------------------------- /static/images/GP-724-X0AAN_NK.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/GP-724-X0AAN_NK.jpeg -------------------------------------------------------------------------------- /static/images/GabbeV_.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/GabbeV_.jpg -------------------------------------------------------------------------------- /static/images/TanStackQueryV5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/TanStackQueryV5.png -------------------------------------------------------------------------------- /static/images/acdlite.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/acdlite.jpg -------------------------------------------------------------------------------- /static/images/acemarke.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/acemarke.jpeg -------------------------------------------------------------------------------- /static/images/alexdotjs.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/alexdotjs.jpg -------------------------------------------------------------------------------- /static/images/ballingt.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/ballingt.jpg -------------------------------------------------------------------------------- /static/images/bytes.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/bytes.jpg -------------------------------------------------------------------------------- /static/images/danvdk.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/danvdk.jpeg -------------------------------------------------------------------------------- /static/images/diegohaz.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/diegohaz.jpeg -------------------------------------------------------------------------------- /static/images/eC_qCxd4.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/eC_qCxd4.jpeg -------------------------------------------------------------------------------- /static/images/housecor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/housecor.png -------------------------------------------------------------------------------- /static/images/kierb.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/kierb.jpg -------------------------------------------------------------------------------- /static/images/leeerob.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/leeerob.jpeg -------------------------------------------------------------------------------- /static/images/mattpocockuk.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/mattpocockuk.jpeg -------------------------------------------------------------------------------- /static/images/michaelc_1991.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/michaelc_1991.jpeg -------------------------------------------------------------------------------- /static/images/monolisa.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/monolisa.jpeg -------------------------------------------------------------------------------- /static/images/mxstbr.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/mxstbr.jpg -------------------------------------------------------------------------------- /static/images/profile.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/profile.jpg -------------------------------------------------------------------------------- /static/images/query-gg.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/query-gg.jpg -------------------------------------------------------------------------------- /static/images/ralex1993.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/ralex1993.jpg -------------------------------------------------------------------------------- /static/images/react-query-api-design-lessons-learned/dark/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-api-design-lessons-learned/dark/1.png -------------------------------------------------------------------------------- /static/images/react-query-api-design-lessons-learned/dark/10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-api-design-lessons-learned/dark/10.png -------------------------------------------------------------------------------- /static/images/react-query-api-design-lessons-learned/dark/11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-api-design-lessons-learned/dark/11.png -------------------------------------------------------------------------------- /static/images/react-query-api-design-lessons-learned/dark/12.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-api-design-lessons-learned/dark/12.png -------------------------------------------------------------------------------- /static/images/react-query-api-design-lessons-learned/dark/13.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-api-design-lessons-learned/dark/13.png -------------------------------------------------------------------------------- /static/images/react-query-api-design-lessons-learned/dark/14.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-api-design-lessons-learned/dark/14.png -------------------------------------------------------------------------------- /static/images/react-query-api-design-lessons-learned/dark/15.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-api-design-lessons-learned/dark/15.png -------------------------------------------------------------------------------- /static/images/react-query-api-design-lessons-learned/dark/16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-api-design-lessons-learned/dark/16.png -------------------------------------------------------------------------------- /static/images/react-query-api-design-lessons-learned/dark/17.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-api-design-lessons-learned/dark/17.png -------------------------------------------------------------------------------- /static/images/react-query-api-design-lessons-learned/dark/18.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-api-design-lessons-learned/dark/18.png -------------------------------------------------------------------------------- /static/images/react-query-api-design-lessons-learned/dark/19.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-api-design-lessons-learned/dark/19.png -------------------------------------------------------------------------------- /static/images/react-query-api-design-lessons-learned/dark/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-api-design-lessons-learned/dark/2.png -------------------------------------------------------------------------------- /static/images/react-query-api-design-lessons-learned/dark/20.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-api-design-lessons-learned/dark/20.png -------------------------------------------------------------------------------- /static/images/react-query-api-design-lessons-learned/dark/21.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-api-design-lessons-learned/dark/21.png -------------------------------------------------------------------------------- /static/images/react-query-api-design-lessons-learned/dark/22.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-api-design-lessons-learned/dark/22.png -------------------------------------------------------------------------------- /static/images/react-query-api-design-lessons-learned/dark/23.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-api-design-lessons-learned/dark/23.png -------------------------------------------------------------------------------- /static/images/react-query-api-design-lessons-learned/dark/24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-api-design-lessons-learned/dark/24.png -------------------------------------------------------------------------------- /static/images/react-query-api-design-lessons-learned/dark/25.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-api-design-lessons-learned/dark/25.png -------------------------------------------------------------------------------- /static/images/react-query-api-design-lessons-learned/dark/26.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-api-design-lessons-learned/dark/26.png -------------------------------------------------------------------------------- /static/images/react-query-api-design-lessons-learned/dark/27.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-api-design-lessons-learned/dark/27.png -------------------------------------------------------------------------------- /static/images/react-query-api-design-lessons-learned/dark/28.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-api-design-lessons-learned/dark/28.png -------------------------------------------------------------------------------- /static/images/react-query-api-design-lessons-learned/dark/29.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-api-design-lessons-learned/dark/29.png -------------------------------------------------------------------------------- /static/images/react-query-api-design-lessons-learned/dark/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-api-design-lessons-learned/dark/3.png -------------------------------------------------------------------------------- /static/images/react-query-api-design-lessons-learned/dark/30.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-api-design-lessons-learned/dark/30.png -------------------------------------------------------------------------------- /static/images/react-query-api-design-lessons-learned/dark/31.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-api-design-lessons-learned/dark/31.png -------------------------------------------------------------------------------- /static/images/react-query-api-design-lessons-learned/dark/32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-api-design-lessons-learned/dark/32.png -------------------------------------------------------------------------------- /static/images/react-query-api-design-lessons-learned/dark/33.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-api-design-lessons-learned/dark/33.png -------------------------------------------------------------------------------- /static/images/react-query-api-design-lessons-learned/dark/34.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-api-design-lessons-learned/dark/34.png -------------------------------------------------------------------------------- /static/images/react-query-api-design-lessons-learned/dark/35.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-api-design-lessons-learned/dark/35.png -------------------------------------------------------------------------------- /static/images/react-query-api-design-lessons-learned/dark/36.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-api-design-lessons-learned/dark/36.png -------------------------------------------------------------------------------- /static/images/react-query-api-design-lessons-learned/dark/37.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-api-design-lessons-learned/dark/37.png -------------------------------------------------------------------------------- /static/images/react-query-api-design-lessons-learned/dark/38.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-api-design-lessons-learned/dark/38.png -------------------------------------------------------------------------------- /static/images/react-query-api-design-lessons-learned/dark/39.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-api-design-lessons-learned/dark/39.png -------------------------------------------------------------------------------- /static/images/react-query-api-design-lessons-learned/dark/4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-api-design-lessons-learned/dark/4.png -------------------------------------------------------------------------------- /static/images/react-query-api-design-lessons-learned/dark/40.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-api-design-lessons-learned/dark/40.png -------------------------------------------------------------------------------- /static/images/react-query-api-design-lessons-learned/dark/41.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-api-design-lessons-learned/dark/41.png -------------------------------------------------------------------------------- /static/images/react-query-api-design-lessons-learned/dark/42.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-api-design-lessons-learned/dark/42.png -------------------------------------------------------------------------------- /static/images/react-query-api-design-lessons-learned/dark/43.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-api-design-lessons-learned/dark/43.png -------------------------------------------------------------------------------- /static/images/react-query-api-design-lessons-learned/dark/44.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-api-design-lessons-learned/dark/44.png -------------------------------------------------------------------------------- /static/images/react-query-api-design-lessons-learned/dark/45.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-api-design-lessons-learned/dark/45.png -------------------------------------------------------------------------------- /static/images/react-query-api-design-lessons-learned/dark/46.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-api-design-lessons-learned/dark/46.png -------------------------------------------------------------------------------- /static/images/react-query-api-design-lessons-learned/dark/47.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-api-design-lessons-learned/dark/47.png -------------------------------------------------------------------------------- /static/images/react-query-api-design-lessons-learned/dark/48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-api-design-lessons-learned/dark/48.png -------------------------------------------------------------------------------- /static/images/react-query-api-design-lessons-learned/dark/49.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-api-design-lessons-learned/dark/49.png -------------------------------------------------------------------------------- /static/images/react-query-api-design-lessons-learned/dark/5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-api-design-lessons-learned/dark/5.png -------------------------------------------------------------------------------- /static/images/react-query-api-design-lessons-learned/dark/50.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-api-design-lessons-learned/dark/50.png -------------------------------------------------------------------------------- /static/images/react-query-api-design-lessons-learned/dark/51.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-api-design-lessons-learned/dark/51.png -------------------------------------------------------------------------------- /static/images/react-query-api-design-lessons-learned/dark/52.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-api-design-lessons-learned/dark/52.png -------------------------------------------------------------------------------- /static/images/react-query-api-design-lessons-learned/dark/53.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-api-design-lessons-learned/dark/53.png -------------------------------------------------------------------------------- /static/images/react-query-api-design-lessons-learned/dark/54.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-api-design-lessons-learned/dark/54.png -------------------------------------------------------------------------------- /static/images/react-query-api-design-lessons-learned/dark/55.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-api-design-lessons-learned/dark/55.png -------------------------------------------------------------------------------- /static/images/react-query-api-design-lessons-learned/dark/56.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-api-design-lessons-learned/dark/56.png -------------------------------------------------------------------------------- /static/images/react-query-api-design-lessons-learned/dark/57.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-api-design-lessons-learned/dark/57.png -------------------------------------------------------------------------------- /static/images/react-query-api-design-lessons-learned/dark/58.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-api-design-lessons-learned/dark/58.png -------------------------------------------------------------------------------- /static/images/react-query-api-design-lessons-learned/dark/59.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-api-design-lessons-learned/dark/59.png -------------------------------------------------------------------------------- /static/images/react-query-api-design-lessons-learned/dark/6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-api-design-lessons-learned/dark/6.png -------------------------------------------------------------------------------- /static/images/react-query-api-design-lessons-learned/dark/60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-api-design-lessons-learned/dark/60.png -------------------------------------------------------------------------------- /static/images/react-query-api-design-lessons-learned/dark/61.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-api-design-lessons-learned/dark/61.png -------------------------------------------------------------------------------- /static/images/react-query-api-design-lessons-learned/dark/7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-api-design-lessons-learned/dark/7.png -------------------------------------------------------------------------------- /static/images/react-query-api-design-lessons-learned/dark/8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-api-design-lessons-learned/dark/8.png -------------------------------------------------------------------------------- /static/images/react-query-api-design-lessons-learned/dark/9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-api-design-lessons-learned/dark/9.png -------------------------------------------------------------------------------- /static/images/react-query-api-design-lessons-learned/light/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-api-design-lessons-learned/light/1.png -------------------------------------------------------------------------------- /static/images/react-query-api-design-lessons-learned/light/10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-api-design-lessons-learned/light/10.png -------------------------------------------------------------------------------- /static/images/react-query-api-design-lessons-learned/light/11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-api-design-lessons-learned/light/11.png -------------------------------------------------------------------------------- /static/images/react-query-api-design-lessons-learned/light/12.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-api-design-lessons-learned/light/12.png -------------------------------------------------------------------------------- /static/images/react-query-api-design-lessons-learned/light/13.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-api-design-lessons-learned/light/13.png -------------------------------------------------------------------------------- /static/images/react-query-api-design-lessons-learned/light/14.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-api-design-lessons-learned/light/14.png -------------------------------------------------------------------------------- /static/images/react-query-api-design-lessons-learned/light/15.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-api-design-lessons-learned/light/15.png -------------------------------------------------------------------------------- /static/images/react-query-api-design-lessons-learned/light/16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-api-design-lessons-learned/light/16.png -------------------------------------------------------------------------------- /static/images/react-query-api-design-lessons-learned/light/17.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-api-design-lessons-learned/light/17.png -------------------------------------------------------------------------------- /static/images/react-query-api-design-lessons-learned/light/18.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-api-design-lessons-learned/light/18.png -------------------------------------------------------------------------------- /static/images/react-query-api-design-lessons-learned/light/19.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-api-design-lessons-learned/light/19.png -------------------------------------------------------------------------------- /static/images/react-query-api-design-lessons-learned/light/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-api-design-lessons-learned/light/2.png -------------------------------------------------------------------------------- /static/images/react-query-api-design-lessons-learned/light/20.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-api-design-lessons-learned/light/20.png -------------------------------------------------------------------------------- /static/images/react-query-api-design-lessons-learned/light/21.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-api-design-lessons-learned/light/21.png -------------------------------------------------------------------------------- /static/images/react-query-api-design-lessons-learned/light/22.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-api-design-lessons-learned/light/22.png -------------------------------------------------------------------------------- /static/images/react-query-api-design-lessons-learned/light/23.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-api-design-lessons-learned/light/23.png -------------------------------------------------------------------------------- /static/images/react-query-api-design-lessons-learned/light/24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-api-design-lessons-learned/light/24.png -------------------------------------------------------------------------------- /static/images/react-query-api-design-lessons-learned/light/25.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-api-design-lessons-learned/light/25.png -------------------------------------------------------------------------------- /static/images/react-query-api-design-lessons-learned/light/26.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-api-design-lessons-learned/light/26.png -------------------------------------------------------------------------------- /static/images/react-query-api-design-lessons-learned/light/27.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-api-design-lessons-learned/light/27.png -------------------------------------------------------------------------------- /static/images/react-query-api-design-lessons-learned/light/28.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-api-design-lessons-learned/light/28.png -------------------------------------------------------------------------------- /static/images/react-query-api-design-lessons-learned/light/29.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-api-design-lessons-learned/light/29.png -------------------------------------------------------------------------------- /static/images/react-query-api-design-lessons-learned/light/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-api-design-lessons-learned/light/3.png -------------------------------------------------------------------------------- /static/images/react-query-api-design-lessons-learned/light/30.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-api-design-lessons-learned/light/30.png -------------------------------------------------------------------------------- /static/images/react-query-api-design-lessons-learned/light/31.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-api-design-lessons-learned/light/31.png -------------------------------------------------------------------------------- /static/images/react-query-api-design-lessons-learned/light/32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-api-design-lessons-learned/light/32.png -------------------------------------------------------------------------------- /static/images/react-query-api-design-lessons-learned/light/33.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-api-design-lessons-learned/light/33.png -------------------------------------------------------------------------------- /static/images/react-query-api-design-lessons-learned/light/34.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-api-design-lessons-learned/light/34.png -------------------------------------------------------------------------------- /static/images/react-query-api-design-lessons-learned/light/35.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-api-design-lessons-learned/light/35.png -------------------------------------------------------------------------------- /static/images/react-query-api-design-lessons-learned/light/36.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-api-design-lessons-learned/light/36.png -------------------------------------------------------------------------------- /static/images/react-query-api-design-lessons-learned/light/37.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-api-design-lessons-learned/light/37.png -------------------------------------------------------------------------------- /static/images/react-query-api-design-lessons-learned/light/38.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-api-design-lessons-learned/light/38.png -------------------------------------------------------------------------------- /static/images/react-query-api-design-lessons-learned/light/39.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-api-design-lessons-learned/light/39.png -------------------------------------------------------------------------------- /static/images/react-query-api-design-lessons-learned/light/4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-api-design-lessons-learned/light/4.png -------------------------------------------------------------------------------- /static/images/react-query-api-design-lessons-learned/light/40.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-api-design-lessons-learned/light/40.png -------------------------------------------------------------------------------- /static/images/react-query-api-design-lessons-learned/light/41.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-api-design-lessons-learned/light/41.png -------------------------------------------------------------------------------- /static/images/react-query-api-design-lessons-learned/light/42.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-api-design-lessons-learned/light/42.png -------------------------------------------------------------------------------- /static/images/react-query-api-design-lessons-learned/light/43.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-api-design-lessons-learned/light/43.png -------------------------------------------------------------------------------- /static/images/react-query-api-design-lessons-learned/light/44.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-api-design-lessons-learned/light/44.png -------------------------------------------------------------------------------- /static/images/react-query-api-design-lessons-learned/light/45.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-api-design-lessons-learned/light/45.png -------------------------------------------------------------------------------- /static/images/react-query-api-design-lessons-learned/light/46.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-api-design-lessons-learned/light/46.png -------------------------------------------------------------------------------- /static/images/react-query-api-design-lessons-learned/light/47.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-api-design-lessons-learned/light/47.png -------------------------------------------------------------------------------- /static/images/react-query-api-design-lessons-learned/light/48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-api-design-lessons-learned/light/48.png -------------------------------------------------------------------------------- /static/images/react-query-api-design-lessons-learned/light/49.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-api-design-lessons-learned/light/49.png -------------------------------------------------------------------------------- /static/images/react-query-api-design-lessons-learned/light/5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-api-design-lessons-learned/light/5.png -------------------------------------------------------------------------------- /static/images/react-query-api-design-lessons-learned/light/50.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-api-design-lessons-learned/light/50.png -------------------------------------------------------------------------------- /static/images/react-query-api-design-lessons-learned/light/51.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-api-design-lessons-learned/light/51.png -------------------------------------------------------------------------------- /static/images/react-query-api-design-lessons-learned/light/52.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-api-design-lessons-learned/light/52.png -------------------------------------------------------------------------------- /static/images/react-query-api-design-lessons-learned/light/53.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-api-design-lessons-learned/light/53.png -------------------------------------------------------------------------------- /static/images/react-query-api-design-lessons-learned/light/54.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-api-design-lessons-learned/light/54.png -------------------------------------------------------------------------------- /static/images/react-query-api-design-lessons-learned/light/55.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-api-design-lessons-learned/light/55.png -------------------------------------------------------------------------------- /static/images/react-query-api-design-lessons-learned/light/56.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-api-design-lessons-learned/light/56.png -------------------------------------------------------------------------------- /static/images/react-query-api-design-lessons-learned/light/57.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-api-design-lessons-learned/light/57.png -------------------------------------------------------------------------------- /static/images/react-query-api-design-lessons-learned/light/58.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-api-design-lessons-learned/light/58.png -------------------------------------------------------------------------------- /static/images/react-query-api-design-lessons-learned/light/59.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-api-design-lessons-learned/light/59.png -------------------------------------------------------------------------------- /static/images/react-query-api-design-lessons-learned/light/6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-api-design-lessons-learned/light/6.png -------------------------------------------------------------------------------- /static/images/react-query-api-design-lessons-learned/light/60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-api-design-lessons-learned/light/60.png -------------------------------------------------------------------------------- /static/images/react-query-api-design-lessons-learned/light/61.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-api-design-lessons-learned/light/61.png -------------------------------------------------------------------------------- /static/images/react-query-api-design-lessons-learned/light/7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-api-design-lessons-learned/light/7.png -------------------------------------------------------------------------------- /static/images/react-query-api-design-lessons-learned/light/8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-api-design-lessons-learned/light/8.png -------------------------------------------------------------------------------- /static/images/react-query-api-design-lessons-learned/light/9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-api-design-lessons-learned/light/9.png -------------------------------------------------------------------------------- /static/images/react-query-the-bad-parts/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-the-bad-parts/1.png -------------------------------------------------------------------------------- /static/images/react-query-the-bad-parts/10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-the-bad-parts/10.png -------------------------------------------------------------------------------- /static/images/react-query-the-bad-parts/11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-the-bad-parts/11.png -------------------------------------------------------------------------------- /static/images/react-query-the-bad-parts/12.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-the-bad-parts/12.png -------------------------------------------------------------------------------- /static/images/react-query-the-bad-parts/13.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-the-bad-parts/13.png -------------------------------------------------------------------------------- /static/images/react-query-the-bad-parts/14.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-the-bad-parts/14.png -------------------------------------------------------------------------------- /static/images/react-query-the-bad-parts/15.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-the-bad-parts/15.png -------------------------------------------------------------------------------- /static/images/react-query-the-bad-parts/16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-the-bad-parts/16.png -------------------------------------------------------------------------------- /static/images/react-query-the-bad-parts/17.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-the-bad-parts/17.png -------------------------------------------------------------------------------- /static/images/react-query-the-bad-parts/18.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-the-bad-parts/18.png -------------------------------------------------------------------------------- /static/images/react-query-the-bad-parts/19.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-the-bad-parts/19.png -------------------------------------------------------------------------------- /static/images/react-query-the-bad-parts/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-the-bad-parts/2.png -------------------------------------------------------------------------------- /static/images/react-query-the-bad-parts/20.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-the-bad-parts/20.png -------------------------------------------------------------------------------- /static/images/react-query-the-bad-parts/21.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-the-bad-parts/21.png -------------------------------------------------------------------------------- /static/images/react-query-the-bad-parts/22.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-the-bad-parts/22.png -------------------------------------------------------------------------------- /static/images/react-query-the-bad-parts/23.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-the-bad-parts/23.png -------------------------------------------------------------------------------- /static/images/react-query-the-bad-parts/24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-the-bad-parts/24.png -------------------------------------------------------------------------------- /static/images/react-query-the-bad-parts/25.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-the-bad-parts/25.png -------------------------------------------------------------------------------- /static/images/react-query-the-bad-parts/26.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-the-bad-parts/26.png -------------------------------------------------------------------------------- /static/images/react-query-the-bad-parts/27.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-the-bad-parts/27.png -------------------------------------------------------------------------------- /static/images/react-query-the-bad-parts/28.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-the-bad-parts/28.png -------------------------------------------------------------------------------- /static/images/react-query-the-bad-parts/29.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-the-bad-parts/29.png -------------------------------------------------------------------------------- /static/images/react-query-the-bad-parts/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-the-bad-parts/3.png -------------------------------------------------------------------------------- /static/images/react-query-the-bad-parts/30.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-the-bad-parts/30.png -------------------------------------------------------------------------------- /static/images/react-query-the-bad-parts/31.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-the-bad-parts/31.png -------------------------------------------------------------------------------- /static/images/react-query-the-bad-parts/32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-the-bad-parts/32.png -------------------------------------------------------------------------------- /static/images/react-query-the-bad-parts/33.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-the-bad-parts/33.png -------------------------------------------------------------------------------- /static/images/react-query-the-bad-parts/34.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-the-bad-parts/34.png -------------------------------------------------------------------------------- /static/images/react-query-the-bad-parts/35.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-the-bad-parts/35.png -------------------------------------------------------------------------------- /static/images/react-query-the-bad-parts/36.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-the-bad-parts/36.png -------------------------------------------------------------------------------- /static/images/react-query-the-bad-parts/37.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-the-bad-parts/37.png -------------------------------------------------------------------------------- /static/images/react-query-the-bad-parts/38.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-the-bad-parts/38.png -------------------------------------------------------------------------------- /static/images/react-query-the-bad-parts/39.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-the-bad-parts/39.png -------------------------------------------------------------------------------- /static/images/react-query-the-bad-parts/4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-the-bad-parts/4.png -------------------------------------------------------------------------------- /static/images/react-query-the-bad-parts/40.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-the-bad-parts/40.png -------------------------------------------------------------------------------- /static/images/react-query-the-bad-parts/41.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-the-bad-parts/41.png -------------------------------------------------------------------------------- /static/images/react-query-the-bad-parts/42.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-the-bad-parts/42.png -------------------------------------------------------------------------------- /static/images/react-query-the-bad-parts/43.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-the-bad-parts/43.png -------------------------------------------------------------------------------- /static/images/react-query-the-bad-parts/44.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-the-bad-parts/44.png -------------------------------------------------------------------------------- /static/images/react-query-the-bad-parts/45.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-the-bad-parts/45.png -------------------------------------------------------------------------------- /static/images/react-query-the-bad-parts/46.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-the-bad-parts/46.png -------------------------------------------------------------------------------- /static/images/react-query-the-bad-parts/47.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-the-bad-parts/47.png -------------------------------------------------------------------------------- /static/images/react-query-the-bad-parts/48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-the-bad-parts/48.png -------------------------------------------------------------------------------- /static/images/react-query-the-bad-parts/49.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-the-bad-parts/49.png -------------------------------------------------------------------------------- /static/images/react-query-the-bad-parts/5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-the-bad-parts/5.png -------------------------------------------------------------------------------- /static/images/react-query-the-bad-parts/50.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-the-bad-parts/50.png -------------------------------------------------------------------------------- /static/images/react-query-the-bad-parts/51.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-the-bad-parts/51.png -------------------------------------------------------------------------------- /static/images/react-query-the-bad-parts/52.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-the-bad-parts/52.png -------------------------------------------------------------------------------- /static/images/react-query-the-bad-parts/53.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-the-bad-parts/53.png -------------------------------------------------------------------------------- /static/images/react-query-the-bad-parts/54.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-the-bad-parts/54.png -------------------------------------------------------------------------------- /static/images/react-query-the-bad-parts/55.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-the-bad-parts/55.png -------------------------------------------------------------------------------- /static/images/react-query-the-bad-parts/56.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-the-bad-parts/56.png -------------------------------------------------------------------------------- /static/images/react-query-the-bad-parts/57.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-the-bad-parts/57.png -------------------------------------------------------------------------------- /static/images/react-query-the-bad-parts/58.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-the-bad-parts/58.png -------------------------------------------------------------------------------- /static/images/react-query-the-bad-parts/59.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-the-bad-parts/59.png -------------------------------------------------------------------------------- /static/images/react-query-the-bad-parts/6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-the-bad-parts/6.png -------------------------------------------------------------------------------- /static/images/react-query-the-bad-parts/60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-the-bad-parts/60.png -------------------------------------------------------------------------------- /static/images/react-query-the-bad-parts/61.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-the-bad-parts/61.png -------------------------------------------------------------------------------- /static/images/react-query-the-bad-parts/62.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-the-bad-parts/62.png -------------------------------------------------------------------------------- /static/images/react-query-the-bad-parts/7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-the-bad-parts/7.png -------------------------------------------------------------------------------- /static/images/react-query-the-bad-parts/8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-the-bad-parts/8.png -------------------------------------------------------------------------------- /static/images/react-query-the-bad-parts/9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/react-query-the-bad-parts/9.png -------------------------------------------------------------------------------- /static/images/reactbricks.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /static/images/ryanflorence.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/ryanflorence.jpeg -------------------------------------------------------------------------------- /static/images/sathya.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/sathya.jpg -------------------------------------------------------------------------------- /static/images/separation_of_concerns.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/separation_of_concerns.jpeg -------------------------------------------------------------------------------- /static/images/sophiebits.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/sophiebits.jpeg -------------------------------------------------------------------------------- /static/images/swyx.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/swyx.jpeg -------------------------------------------------------------------------------- /static/images/tannerlinsley.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/tannerlinsley.jpeg -------------------------------------------------------------------------------- /static/images/theo_twitter.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/theo_twitter.jpg -------------------------------------------------------------------------------- /static/images/thinking-in-react-query/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/thinking-in-react-query/1.png -------------------------------------------------------------------------------- /static/images/thinking-in-react-query/10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/thinking-in-react-query/10.png -------------------------------------------------------------------------------- /static/images/thinking-in-react-query/11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/thinking-in-react-query/11.png -------------------------------------------------------------------------------- /static/images/thinking-in-react-query/12.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/thinking-in-react-query/12.png -------------------------------------------------------------------------------- /static/images/thinking-in-react-query/13.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/thinking-in-react-query/13.png -------------------------------------------------------------------------------- /static/images/thinking-in-react-query/14.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/thinking-in-react-query/14.png -------------------------------------------------------------------------------- /static/images/thinking-in-react-query/15.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/thinking-in-react-query/15.png -------------------------------------------------------------------------------- /static/images/thinking-in-react-query/16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/thinking-in-react-query/16.png -------------------------------------------------------------------------------- /static/images/thinking-in-react-query/17.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/thinking-in-react-query/17.png -------------------------------------------------------------------------------- /static/images/thinking-in-react-query/18.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/thinking-in-react-query/18.png -------------------------------------------------------------------------------- /static/images/thinking-in-react-query/19.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/thinking-in-react-query/19.png -------------------------------------------------------------------------------- /static/images/thinking-in-react-query/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/thinking-in-react-query/2.png -------------------------------------------------------------------------------- /static/images/thinking-in-react-query/20.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/thinking-in-react-query/20.png -------------------------------------------------------------------------------- /static/images/thinking-in-react-query/21.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/thinking-in-react-query/21.png -------------------------------------------------------------------------------- /static/images/thinking-in-react-query/22.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/thinking-in-react-query/22.png -------------------------------------------------------------------------------- /static/images/thinking-in-react-query/23.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/thinking-in-react-query/23.png -------------------------------------------------------------------------------- /static/images/thinking-in-react-query/24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/thinking-in-react-query/24.png -------------------------------------------------------------------------------- /static/images/thinking-in-react-query/25.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/thinking-in-react-query/25.png -------------------------------------------------------------------------------- /static/images/thinking-in-react-query/26.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/thinking-in-react-query/26.png -------------------------------------------------------------------------------- /static/images/thinking-in-react-query/27.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/thinking-in-react-query/27.png -------------------------------------------------------------------------------- /static/images/thinking-in-react-query/28.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/thinking-in-react-query/28.png -------------------------------------------------------------------------------- /static/images/thinking-in-react-query/29.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/thinking-in-react-query/29.png -------------------------------------------------------------------------------- /static/images/thinking-in-react-query/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/thinking-in-react-query/3.png -------------------------------------------------------------------------------- /static/images/thinking-in-react-query/30.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/thinking-in-react-query/30.png -------------------------------------------------------------------------------- /static/images/thinking-in-react-query/31.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/thinking-in-react-query/31.png -------------------------------------------------------------------------------- /static/images/thinking-in-react-query/32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/thinking-in-react-query/32.png -------------------------------------------------------------------------------- /static/images/thinking-in-react-query/33.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/thinking-in-react-query/33.png -------------------------------------------------------------------------------- /static/images/thinking-in-react-query/34.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/thinking-in-react-query/34.png -------------------------------------------------------------------------------- /static/images/thinking-in-react-query/35.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/thinking-in-react-query/35.png -------------------------------------------------------------------------------- /static/images/thinking-in-react-query/36.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/thinking-in-react-query/36.png -------------------------------------------------------------------------------- /static/images/thinking-in-react-query/37.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/thinking-in-react-query/37.png -------------------------------------------------------------------------------- /static/images/thinking-in-react-query/38.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/thinking-in-react-query/38.png -------------------------------------------------------------------------------- /static/images/thinking-in-react-query/39.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/thinking-in-react-query/39.png -------------------------------------------------------------------------------- /static/images/thinking-in-react-query/4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/thinking-in-react-query/4.png -------------------------------------------------------------------------------- /static/images/thinking-in-react-query/40.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/thinking-in-react-query/40.png -------------------------------------------------------------------------------- /static/images/thinking-in-react-query/41.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/thinking-in-react-query/41.png -------------------------------------------------------------------------------- /static/images/thinking-in-react-query/42.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/thinking-in-react-query/42.png -------------------------------------------------------------------------------- /static/images/thinking-in-react-query/43.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/thinking-in-react-query/43.png -------------------------------------------------------------------------------- /static/images/thinking-in-react-query/44.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/thinking-in-react-query/44.png -------------------------------------------------------------------------------- /static/images/thinking-in-react-query/45.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/thinking-in-react-query/45.png -------------------------------------------------------------------------------- /static/images/thinking-in-react-query/46.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/thinking-in-react-query/46.png -------------------------------------------------------------------------------- /static/images/thinking-in-react-query/47.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/thinking-in-react-query/47.png -------------------------------------------------------------------------------- /static/images/thinking-in-react-query/48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/thinking-in-react-query/48.png -------------------------------------------------------------------------------- /static/images/thinking-in-react-query/49.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/thinking-in-react-query/49.png -------------------------------------------------------------------------------- /static/images/thinking-in-react-query/5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/thinking-in-react-query/5.png -------------------------------------------------------------------------------- /static/images/thinking-in-react-query/50.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/thinking-in-react-query/50.png -------------------------------------------------------------------------------- /static/images/thinking-in-react-query/51.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/thinking-in-react-query/51.png -------------------------------------------------------------------------------- /static/images/thinking-in-react-query/52.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/thinking-in-react-query/52.png -------------------------------------------------------------------------------- /static/images/thinking-in-react-query/53.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/thinking-in-react-query/53.png -------------------------------------------------------------------------------- /static/images/thinking-in-react-query/54.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/thinking-in-react-query/54.png -------------------------------------------------------------------------------- /static/images/thinking-in-react-query/55.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/thinking-in-react-query/55.png -------------------------------------------------------------------------------- /static/images/thinking-in-react-query/56.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/thinking-in-react-query/56.png -------------------------------------------------------------------------------- /static/images/thinking-in-react-query/6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/thinking-in-react-query/6.png -------------------------------------------------------------------------------- /static/images/thinking-in-react-query/7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/thinking-in-react-query/7.png -------------------------------------------------------------------------------- /static/images/thinking-in-react-query/8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/thinking-in-react-query/8.png -------------------------------------------------------------------------------- /static/images/thinking-in-react-query/9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/thinking-in-react-query/9.png -------------------------------------------------------------------------------- /static/images/trpc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/trpc.png -------------------------------------------------------------------------------- /static/images/v5390.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/v5390.jpeg -------------------------------------------------------------------------------- /static/images/willmcgugan.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/willmcgugan.jpeg -------------------------------------------------------------------------------- /static/images/workflowgen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/images/workflowgen.png -------------------------------------------------------------------------------- /static/loading-forever.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/loading-forever.gif -------------------------------------------------------------------------------- /static/loading-forever.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/loading-forever.png -------------------------------------------------------------------------------- /static/network-error.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/network-error.gif -------------------------------------------------------------------------------- /static/network-error.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/network-error.png -------------------------------------------------------------------------------- /static/og-images/2021-in-review.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/og-images/2021-in-review.png -------------------------------------------------------------------------------- /static/og-images/2022-in-review.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/og-images/2022-in-review.png -------------------------------------------------------------------------------- /static/og-images/2023-in-review.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/og-images/2023-in-review.png -------------------------------------------------------------------------------- /static/og-images/2024-in-review.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/og-images/2024-in-review.png -------------------------------------------------------------------------------- /static/og-images/about-async-functions.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/og-images/about-async-functions.png -------------------------------------------------------------------------------- /static/og-images/always-provide-customer-value.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/og-images/always-provide-customer-value.png -------------------------------------------------------------------------------- /static/og-images/array-types-in-type-script.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/og-images/array-types-in-type-script.png -------------------------------------------------------------------------------- /static/og-images/automatic-query-invalidation-after-mutations.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/og-images/automatic-query-invalidation-after-mutations.png -------------------------------------------------------------------------------- /static/og-images/avoiding-hydration-mismatches-with-use-sync-external-store.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/og-images/avoiding-hydration-mismatches-with-use-sync-external-store.png -------------------------------------------------------------------------------- /static/og-images/avoiding-legacy-systems.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/og-images/avoiding-legacy-systems.png -------------------------------------------------------------------------------- /static/og-images/avoiding-use-effect-with-callback-refs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/og-images/avoiding-use-effect-with-callback-refs.png -------------------------------------------------------------------------------- /static/og-images/beware-the-leaking-any.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/og-images/beware-the-leaking-any.png -------------------------------------------------------------------------------- /static/og-images/breaking-react-querys-api-on-purpose.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/og-images/breaking-react-querys-api-on-purpose.png -------------------------------------------------------------------------------- /static/og-images/calling-java-script-from-type-script.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/og-images/calling-java-script-from-type-script.png -------------------------------------------------------------------------------- /static/og-images/component-composition-is-great-btw.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/og-images/component-composition-is-great-btw.png -------------------------------------------------------------------------------- /static/og-images/concurrent-optimistic-updates-in-react-query.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/og-images/concurrent-optimistic-updates-in-react-query.png -------------------------------------------------------------------------------- /static/og-images/dont-over-use-state.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/og-images/dont-over-use-state.png -------------------------------------------------------------------------------- /static/og-images/effective-react-query-keys.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/og-images/effective-react-query-keys.png -------------------------------------------------------------------------------- /static/og-images/exhaustive-matching-in-type-script.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/og-images/exhaustive-matching-in-type-script.png -------------------------------------------------------------------------------- /static/og-images/flow-to-type-script-migration-journey.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/og-images/flow-to-type-script-migration-journey.png -------------------------------------------------------------------------------- /static/og-images/hooks-dependencies-and-stale-closures.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/og-images/hooks-dependencies-and-stale-closures.png -------------------------------------------------------------------------------- /static/og-images/how-can-i.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/og-images/how-can-i.png -------------------------------------------------------------------------------- /static/og-images/how-infinite-queries-work.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/og-images/how-infinite-queries-work.png -------------------------------------------------------------------------------- /static/og-images/inside-react-query.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/og-images/inside-react-query.png -------------------------------------------------------------------------------- /static/og-images/introducing-x-state-store.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/og-images/introducing-x-state-store.png -------------------------------------------------------------------------------- /static/og-images/leveraging-the-query-function-context.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/og-images/leveraging-the-query-function-context.png -------------------------------------------------------------------------------- /static/og-images/mastering-mutations-in-react-query.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/og-images/mastering-mutations-in-react-query.png -------------------------------------------------------------------------------- /static/og-images/my-open-source-origin-story.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/og-images/my-open-source-origin-story.png -------------------------------------------------------------------------------- /static/og-images/my-slow-retreat-from-twitter.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/og-images/my-slow-retreat-from-twitter.png -------------------------------------------------------------------------------- /static/og-images/no-love-for-boolean-parameters.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/og-images/no-love-for-boolean-parameters.png -------------------------------------------------------------------------------- /static/og-images/offline-react-query.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/og-images/offline-react-query.png -------------------------------------------------------------------------------- /static/og-images/on-naming-things.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/og-images/on-naming-things.png -------------------------------------------------------------------------------- /static/og-images/optional-vs-undefined.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/og-images/optional-vs-undefined.png -------------------------------------------------------------------------------- /static/og-images/oss-feature-decision-tree.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/og-images/oss-feature-decision-tree.png -------------------------------------------------------------------------------- /static/og-images/pedantic-index-signatures-in-type-script-4-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/og-images/pedantic-index-signatures-in-type-script-4-1.png -------------------------------------------------------------------------------- /static/og-images/placeholder-and-initial-data-in-react-query.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/og-images/placeholder-and-initial-data-in-react-query.png -------------------------------------------------------------------------------- /static/og-images/please-stop-using-barrel-files.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/og-images/please-stop-using-barrel-files.png -------------------------------------------------------------------------------- /static/og-images/practical-react-query.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/og-images/practical-react-query.png -------------------------------------------------------------------------------- /static/og-images/putting-props-to-use-state.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/og-images/putting-props-to-use-state.png -------------------------------------------------------------------------------- /static/og-images/react-19-and-suspense-a-drama-in-3-acts.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/og-images/react-19-and-suspense-a-drama-in-3-acts.png -------------------------------------------------------------------------------- /static/og-images/react-query-and-forms.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/og-images/react-query-and-forms.png -------------------------------------------------------------------------------- /static/og-images/react-query-and-react-context.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/og-images/react-query-and-react-context.png -------------------------------------------------------------------------------- /static/og-images/react-query-and-type-script.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/og-images/react-query-and-type-script.png -------------------------------------------------------------------------------- /static/og-images/react-query-api-design-lessons-learned.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/og-images/react-query-api-design-lessons-learned.png -------------------------------------------------------------------------------- /static/og-images/react-query-as-a-state-manager.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/og-images/react-query-as-a-state-manager.png -------------------------------------------------------------------------------- /static/og-images/react-query-data-transformations.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/og-images/react-query-data-transformations.png -------------------------------------------------------------------------------- /static/og-images/react-query-error-handling.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/og-images/react-query-error-handling.png -------------------------------------------------------------------------------- /static/og-images/react-query-fa-qs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/og-images/react-query-fa-qs.png -------------------------------------------------------------------------------- /static/og-images/react-query-meets-react-router.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/og-images/react-query-meets-react-router.png -------------------------------------------------------------------------------- /static/og-images/react-query-render-optimizations.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/og-images/react-query-render-optimizations.png -------------------------------------------------------------------------------- /static/og-images/react-query-the-bad-parts.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/og-images/react-query-the-bad-parts.png -------------------------------------------------------------------------------- /static/og-images/ref-callbacks-react-19-and-the-compiler.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/og-images/ref-callbacks-react-19-and-the-compiler.png -------------------------------------------------------------------------------- /static/og-images/refactor-impactfully.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/og-images/refactor-impactfully.png -------------------------------------------------------------------------------- /static/og-images/refs-events-and-escape-hatches.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/og-images/refs-events-and-escape-hatches.png -------------------------------------------------------------------------------- /static/og-images/road-to-refactoring.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/og-images/road-to-refactoring.png -------------------------------------------------------------------------------- /static/og-images/seeding-the-query-cache.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/og-images/seeding-the-query-cache.png -------------------------------------------------------------------------------- /static/og-images/simplifying-use-effect.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/og-images/simplifying-use-effect.png -------------------------------------------------------------------------------- /static/og-images/solving-conflicts-in-package-lock-json.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/og-images/solving-conflicts-in-package-lock-json.png -------------------------------------------------------------------------------- /static/og-images/status-checks-in-react-query.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/og-images/status-checks-in-react-query.png -------------------------------------------------------------------------------- /static/og-images/testing-react-query.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/og-images/testing-react-query.png -------------------------------------------------------------------------------- /static/og-images/the-beauty-of-tan-stack-router.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/og-images/the-beauty-of-tan-stack-router.png -------------------------------------------------------------------------------- /static/og-images/the-power-of-const-assertions.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/og-images/the-power-of-const-assertions.png -------------------------------------------------------------------------------- /static/og-images/the-query-options-api.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/og-images/the-query-options-api.png -------------------------------------------------------------------------------- /static/og-images/the-uphill-battle-of-memoization.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/og-images/the-uphill-battle-of-memoization.png -------------------------------------------------------------------------------- /static/og-images/things-to-know-about-use-state.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/og-images/things-to-know-about-use-state.png -------------------------------------------------------------------------------- /static/og-images/thinking-in-react-query.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/og-images/thinking-in-react-query.png -------------------------------------------------------------------------------- /static/og-images/type-safe-react-query.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/og-images/type-safe-react-query.png -------------------------------------------------------------------------------- /static/og-images/use-state-for-one-time-initializations.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/og-images/use-state-for-one-time-initializations.png -------------------------------------------------------------------------------- /static/og-images/use-state-vs-use-reducer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/og-images/use-state-vs-use-reducer.png -------------------------------------------------------------------------------- /static/og-images/use-urgency.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/og-images/use-urgency.png -------------------------------------------------------------------------------- /static/og-images/using-web-sockets-with-react-query.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/og-images/using-web-sockets-with-react-query.png -------------------------------------------------------------------------------- /static/og-images/why-i-dont-like-reduce.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/og-images/why-i-dont-like-reduce.png -------------------------------------------------------------------------------- /static/og-images/why-react-isnt-dying.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/og-images/why-react-isnt-dying.png -------------------------------------------------------------------------------- /static/og-images/why-you-want-react-query.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/og-images/why-you-want-react-query.png -------------------------------------------------------------------------------- /static/og-images/working-with-zustand.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/og-images/working-with-zustand.png -------------------------------------------------------------------------------- /static/og-images/you-might-not-need-react-query.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/og-images/you-might-not-need-react-query.png -------------------------------------------------------------------------------- /static/og-images/zustand-and-react-context.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/og-images/zustand-and-react-context.png -------------------------------------------------------------------------------- /static/paused.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/paused.gif -------------------------------------------------------------------------------- /static/paused.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/paused.png -------------------------------------------------------------------------------- /static/robots.txt: -------------------------------------------------------------------------------- 1 | User-agent: * 2 | 3 | sitemap: https://tkdodo.eu/blog/sitemap.xml 4 | -------------------------------------------------------------------------------- /static/stack.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/stack.png -------------------------------------------------------------------------------- /static/tk-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/tk-logo.png -------------------------------------------------------------------------------- /static/wings4life-still.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/wings4life-still.gif -------------------------------------------------------------------------------- /static/wings4life.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TkDodo/blog/895986c22945ab82b5590b9f090d0c3cb6aa4335/static/wings4life.gif --------------------------------------------------------------------------------