skip to content
walterra.dev

Optimizing React Form State with Constate

/ 1 min read

I worked on optimizing some React form state management: From a full rerender with ~15ms on every keystroke down to ~3ms thanks to constate lib. Nice thing about constate: It just picks up custom hooks you might already have, it doesn’t feel like a whole different lib to be picked up like Redux.

constate is a helper that abstracts away creating multiple contexts and related custom hooks to subscribe the updates. This allows you to circumvent the problem of full state updates when managing state in a single context. As I said above, the way you write React doesn’t change much, it doesn’t feel like you need to buy in to another external state management lib.

Here’s the PR with a more detailed description for Kibana that includes that update: https://github.com/elastic/kibana/pull/149670

Before the update, everything would update, visible in the Chrome Dev Tools Flame Graph because everything is colored:

Screenshot of Chrome Dev Tools Flame Graph before state management update

When rendering with the update, the gray areas indicate that the full form is no longer rerendered on every keystroke but just the elements that have been touched.

Screenshot of Chrome Dev Tools Flame Graph after state management update

Comments powered by Talkyard.