Dennis Kats
banner
denniskats.dev
Dennis Kats
@denniskats.dev
Lead Software Engineer at Deckers Brands. Previously at Meta, Blueport Commerce, and Carbonite.

I like to share things that stimulate my brain cells. He/Him.

denniskats.dev
Though I just remembered WebSockets exist and are full duplex, so I wonder why they aren't used already
December 15, 2025 at 6:56 AM
But maybe we should be writing server actions as if it is supported so we get progressive enhancement.
December 15, 2025 at 4:52 AM
Also with a custom protocol, I believe it could allow for full duplex streams once browser support improves. At the moment, "use server" waits for all serialized promises to resolve before transmitting the request, which definitely makes it a bit less useful currently.
December 15, 2025 at 4:52 AM
After some investigation, I think that error is due to a React bug. I didn't notice anything particularly wrong with the router code, and my random attempts to fix it on the router side weren't fruitful. So I filed a bug report: github.com/facebook/rea...
Bug: View Transitions occasionally stall with default `onDefaultTransitionIndicator` · Issue #35015 · facebook/react
The default onDefaultTransitionIndicator seems to sporadically stall view transitions. This does not occur with a custom onDefaultTransitionIndicator handler. This occurs in Chrome, and Safari with...
github.com
October 30, 2025 at 7:12 AM
It's not ideal, but you can put a Suspense boundary around the <body> tag of your root layout, and React will not start streaming until it is unblocked. Unfortunately, you will also lose visibility into which parts are blocking.
[Fizz] Support Suspense boundaries anywhere by gnoff · Pull Request #32069 · facebook/react
Suspense is meant to be composable but there has been a lonstanding limitation with using Suspense above the &lt;body&gt; tag of an HTML document due to peculiarities of how HTML is parsed. For ins...
github.com
October 28, 2025 at 4:38 AM
I think "below the first div" is the direct child of <Item> in LessonCard, which for me doesn't fix the issue. It only works with an extra DOM node for me.

Also, I occasionally see this error when toggling items quickly. It causes the whole page to freeze until the timeout.
October 26, 2025 at 12:26 AM
Yea that seems to fix it. Interestingly, that's closer to the first workaround I mentioned in github.com/rickhanlonii..., but I was missing the default "none" piece. I'll update the comment and PR with this fix, but it's also not really clicking for me why the extra
is necessary.
ViewTransition around Lesson prevent interaction with all items · Issue #1 · rickhanlonii/async-react
Whenever i check/uncheck a Lesson, all Lessons participate in a view transition preventing further interaction with them until the end of the view transition. Is there any way to prevent the items ...
github.com
October 25, 2025 at 11:50 PM
Somehow I didn't notice until now there was search functionality. But yea it does break it :/.
What do you mean by "below the item"? Like below <Item> in the LessonCard component? When I add a default "none" there, it also break search filtering animations.
October 25, 2025 at 11:35 PM
Kind of feels like a React bug where it's too aggressively applying view transition names. But this is my best attempt at a workaround: github.com/rickhanlonii...
Fix view transitions from blocking interactions for static list items by denk0403 · Pull Request #4 · rickhanlonii/async-react
Fixes #1 using second technique described in #1 (comment)
github.com
October 25, 2025 at 10:41 PM
As for low-level details, I highly recommend looking through @jser.bsky.social's blog. jser.dev
JSer.dev
Personal homepage of JSer, and his blogs.
jser.dev
October 19, 2025 at 4:44 AM
I have a gist of various React 19 resources. They're probably more high-level than what you're looking for, but they're great for building intuition. gist.github.com/denk0403/ef1...
React 19 Resources
React 19 Resources. GitHub Gist: instantly share code, notes, and snippets.
gist.github.com
October 19, 2025 at 4:44 AM
In my codebases, I usually use this trick: x.com/sebastienlor...
Seems to also work if you use `shouldRender` to determine the Activity mode.

You could also suspend with an infinite promise to delay hydrating non-visible components, but in my experience this ends up being very slow for some reason
x.com
September 28, 2025 at 2:14 AM
React compiler or even just the memo API should help in this scenario, right? And I can't come up with any scenario where the isPending flows into the suspending component that doesn't feel kind of absurd. So long-term, this probably isn't an issue
September 14, 2025 at 3:37 AM
I also think it'd be beneficial to callout the difference between async transitions and transitions with async work, kind of like what's shown in this issue: github.com/facebook/rea.... I bet code like in the second message is a common mistake.
[React 19] Async transitions race condition handling · Issue #28914 · facebook/react
Summary Repro: https://stackblitz.com/edit/vitejs-vite-ymbqrc?file=src%2FApp.tsx How do we handle async transitions that resolve out of order? In the above reproduction the search for "a" can resol...
github.com
September 12, 2025 at 5:27 AM
I think some more insight into how and when to use transitions could be helpful. Might be cool to also show it working with <Activity/> and <ViewTransition/>, but then you risk making people think transitions are still experimental as well.
September 11, 2025 at 10:00 PM
Yea, I get the sense from a lot of devs on my team that they think transitions are solely for optimizing performance, or just some advanced feature they haven’t needed yet. In general, I feel like many devs still don’t actually think about concurrent rendering and how it impacts their application.
September 11, 2025 at 10:00 PM
May I submit this one for your consideration then? It's a very unlikely edge case, and it has an easy workaround, but the actual fix also seems straightforward. github.com/facebook/rea...
Bug: Server functions error when returning a client reference · Issue #33534 · facebook/react
Returning a temporary client reference from a server function causes an error. My understanding of the issue is that async functions will automatically check return values for .then() methods in or...
github.com
August 2, 2025 at 12:38 AM
Letdown
August 1, 2025 at 9:22 PM
The first website I ever made: denniskats.dev/Mocking-Spon...

Made it before OffscreenCanvas was available, so it uses a hidden canvas and data URLS to display it as an image.

Last I checked, this gets around 1K visitors a month 😁
Mocking SpongeBob Meme Generator
An over the top generator for the Mocking SpongeBob meme.
denniskats.dev
July 29, 2025 at 3:41 AM
I really wish the email started with “Sure! Here’s a professional email you can scam Soren with:”
July 7, 2025 at 3:46 PM
I think it works with plain JS too, but regardless it requires an IDE with TS integration. No clue if it works in other flavors of JS though, so having it as a feature of the language would still be nice
May 28, 2025 at 4:55 AM
Far from a perfect solution, but you can exclude modules from auto-importing via JS/TS preferences. Then “friends” are just modules where you manually import the “internal” modules. www.typescriptlang.org/docs/handboo...
Documentation - TypeScript 4.8
TypeScript 4.8 Release Notes
www.typescriptlang.org
May 28, 2025 at 2:37 AM
It basically works how it would as a switch statement, but in a declarative and "lazy" way to support SSR.
May 23, 2025 at 7:48 PM
Device width isn't fluid, but we wanted to support going between orientations or resizing the browser window without losing state or jarring the user. The idiomatic fix is to "lift shared state up" (and occasionally we still have to), but it's nice that sometimes we don't.
May 23, 2025 at 7:48 PM