<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Christian Boffill</title>
    <description>The latest articles on Forem by Christian Boffill (@christbm).</description>
    <link>https://forem.com/christbm</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3320327%2Fcdef8586-666c-45e1-9349-d6781002a4b3.jpg</url>
      <title>Forem: Christian Boffill</title>
      <link>https://forem.com/christbm</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/christbm"/>
    <language>en</language>
    <item>
      <title>The Simplest Way to Manage State in React</title>
      <dc:creator>Christian Boffill</dc:creator>
      <pubDate>Mon, 07 Jul 2025 17:39:02 +0000</pubDate>
      <link>https://forem.com/christbm/the-simplest-way-to-manage-state-in-react-5a38</link>
      <guid>https://forem.com/christbm/the-simplest-way-to-manage-state-in-react-5a38</guid>
      <description>&lt;h2&gt;
  
  
  Why I Built use-s-react
&lt;/h2&gt;

&lt;p&gt;I've always liked React's functional style, but when it comes to managing state in the application, things get complicated and whatever alternative you choose, you end up writing the detested boilerplate.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;useState&lt;/code&gt; is great for local values, but managing shared state across components? That often meant jumping to &lt;code&gt;useContext&lt;/code&gt;, Redux, Zustand, or other more complex tools.  &lt;/p&gt;

&lt;p&gt;It's not just boilerplate, if you want to use a third party library, you also end up having to learn new concepts or approaches to make use of it.&lt;/p&gt;

&lt;p&gt;But in many cases, all I wanted was: a simple way to manage local &lt;strong&gt;and&lt;/strong&gt; global state without all the ceremony.&lt;/p&gt;




&lt;h2&gt;
  
  
  What is useS?
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;useS&lt;/code&gt; is a React hook for managing &lt;strong&gt;local and global&lt;/strong&gt; state through a simple, unified API.&lt;br&gt;&lt;br&gt;
It's powered by &lt;code&gt;useSyncExternalStore&lt;/code&gt; under the hood, ensuring &lt;strong&gt;consistent and performant state&lt;/strong&gt; updates—no matter where the component lives.&lt;/p&gt;

&lt;p&gt;Here are some of its key features:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;✅ API as intuitive as &lt;code&gt;useState&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;✅ Manage local and global state with a single line&lt;/li&gt;
&lt;li&gt;✅ No context, providers, or boilerplate needed&lt;/li&gt;
&lt;li&gt;✅ Immutable by default — even for complex objects&lt;/li&gt;
&lt;li&gt;✅ Automatic deep comparison to avoid unnecessary renders&lt;/li&gt;
&lt;li&gt;✅ Support for declarative derived state&lt;/li&gt;
&lt;li&gt;✅ Full TypeScript support&lt;/li&gt;
&lt;li&gt;✅ Scalable patterns out of the box&lt;/li&gt;
&lt;/ul&gt;


&lt;h2&gt;
  
  
  Getting Started with useS
&lt;/h2&gt;

&lt;p&gt;Let’s take a look at how easy it is to get started with &lt;code&gt;useS&lt;/code&gt;.&lt;/p&gt;
&lt;h3&gt;
  
  
  1. Installation
&lt;/h3&gt;

&lt;p&gt;Install it using your favorite package manager (&lt;a href="https://www.npmjs.com/package/use-s-react" rel="noopener noreferrer"&gt;npm page&lt;/a&gt;):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm i use-s-react
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  2. Local State (Just like useState)
&lt;/h3&gt;

&lt;p&gt;If you're familiar with &lt;code&gt;useState&lt;/code&gt;, you'll feel right at home. Here’s a basic counter:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;useS&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;use-s-react&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;Component&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;count&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setCount&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useS&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt; &lt;span class="na"&gt;onClick&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;setCount&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;prev&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;prev&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      You clicked &lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;count&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; times
    &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;✅ You just used local state — no different from useState&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  3.Global State (Same line, more power)
&lt;/h3&gt;

&lt;p&gt;Want to share state across multiple components? Just add the config object:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;useS&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;use-s-react&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;Component&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;count&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setCount&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useS&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;value&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;key&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;global-counter&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;

  &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt; &lt;span class="na"&gt;onClick&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;setCount&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;prev&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;prev&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      You clicked &lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;count&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; times
    &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Try this line in another component:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;count&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setCount&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useS&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;value&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;key&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;global-counter&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;🔁 Now this state is global. Any component using the same key will be automatically synced.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h4&gt;
  
  
  That's it
&lt;/h4&gt;

&lt;p&gt;With a single line of code, you can handle both local and global state.&lt;br&gt;
No context, no boilerplate, no custom providers—just a consistent, intuitive API.&lt;/p&gt;




&lt;h2&gt;
  
  
  Comparing useS with React's Built-in APIs
&lt;/h2&gt;

&lt;p&gt;React gives you full control with primitives like &lt;code&gt;useState&lt;/code&gt;, &lt;code&gt;useReducer&lt;/code&gt;, and &lt;code&gt;useContext&lt;/code&gt;, but composing them for global state often adds friction. Here's how &lt;code&gt;useS&lt;/code&gt; compares:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature / API&lt;/th&gt;
&lt;th&gt;React APIs&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;useS&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Local state&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;No Boilerplate (Local)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;🟡 Low–Medium&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Ease of use (Local)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;🟡 Medium&lt;/td&gt;
&lt;td&gt;🟢 Easy&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Global state&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;No Boilerplate (Global)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;🟡 Medium&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Ease of use (Global)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;🔴 Hard&lt;/td&gt;
&lt;td&gt;🟢 Easy&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;No Provider Required&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Deep comparison&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Automatic immutability&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Derived state support&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;⚠️ Manual&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;TypeScript support&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Bundle size&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;✅ (built-in)&lt;/td&gt;
&lt;td&gt;🟢 Small (~1.5 KB)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;State persistence&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌ (coming soon)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;✅ = Excellent / No boilerplate required , ❌ = Missing feature&lt;br&gt;&lt;br&gt;
🟢 = Great , 🟡 = Acceptable , 🔴 = Verbose / Painful , ⚠️ = Workaround needed&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Why useS over plain React APIs?
&lt;/h3&gt;

&lt;p&gt;While React gives you all the primitives to manage state, combining them for global use often leads to excessive boilerplate, complexity, and patterns that don’t scale well.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;useS&lt;/code&gt; was designed to simplify that experience.&lt;/p&gt;

&lt;p&gt;With just one line, you can manage local and global state, skip the boilerplate, and unlock features like automatic immutability, deep comparison, and derived state—all while keeping full TypeScript support and avoiding providers or custom setups.&lt;/p&gt;

&lt;p&gt;But &lt;code&gt;useS&lt;/code&gt; goes beyond simplicity: it also gives you structure.&lt;/p&gt;

&lt;p&gt;By using &lt;code&gt;key&lt;/code&gt;-based state definitions, you can organize your application into one centralized store or multiple scoped stores as your architecture demands. Since the global store is just a JavaScript object under the hood, you remain fully in control—no extra abstractions, no black boxes.&lt;/p&gt;




&lt;h2&gt;
  
  
  My Top 5 State Management Libraries in React (2025 Edition)
&lt;/h2&gt;

&lt;p&gt;After spending the last few years building React apps, testing patterns, and experimenting with different state management strategies, I wanted to take a step back and evaluate the best tools we have available today in 2025.&lt;/p&gt;

&lt;p&gt;To be as objective as possible, I created a scoring system based on the following criteria:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Local state support
&lt;/li&gt;
&lt;li&gt;Global state support
&lt;/li&gt;
&lt;li&gt;Ease of use
&lt;/li&gt;
&lt;li&gt;Boilerplate required
&lt;/li&gt;
&lt;li&gt;Provider-free usage
&lt;/li&gt;
&lt;li&gt;Deep comparison support
&lt;/li&gt;
&lt;li&gt;Automatic immutability
&lt;/li&gt;
&lt;li&gt;Derived state support
&lt;/li&gt;
&lt;li&gt;TypeScript support
&lt;/li&gt;
&lt;li&gt;Bundle size
&lt;/li&gt;
&lt;li&gt;React 18+ compatibility
&lt;/li&gt;
&lt;li&gt;Web &amp;amp; React Native compatibility
&lt;/li&gt;
&lt;li&gt;Debugging / DevTools integration
&lt;/li&gt;
&lt;li&gt;Built-in persistence
&lt;/li&gt;
&lt;li&gt;Unique architectural advantages&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each library received a score from &lt;strong&gt;0 to 10&lt;/strong&gt; per category:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;0&lt;/strong&gt; means the feature is not present.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;4–8&lt;/strong&gt; reflects basic or intermediate support.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;9–10&lt;/strong&gt; means the feature is robust, polished, or exceptionally well-implemented.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Based on that evaluation, here's &lt;strong&gt;my personal Top 5&lt;/strong&gt; for this year:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Library&lt;/th&gt;
&lt;th&gt;Overall&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;useS&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;9.3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Zustand&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;8.8&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Jotai&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;8.6&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Redux-Toolkit&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;8.4&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Recoil&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;8.2&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  A Personal Note
&lt;/h3&gt;

&lt;p&gt;This ranking is &lt;strong&gt;not meant to discredit or diminish&lt;/strong&gt; the incredible work done by the teams behind Zustand, Jotai, Redux Toolkit, Recoil, and many others. Each of these libraries is powerful, well-maintained, and trusted by thousands of developers—including myself at different stages of my career.&lt;/p&gt;

&lt;p&gt;But after building &lt;code&gt;useS&lt;/code&gt;, testing it extensively, and embracing its simplicity and flexibility, I can confidently say that this is &lt;strong&gt;how I want to manage state in React moving forward&lt;/strong&gt;. Whether it's a local counter or a shared global structure, I now reach for &lt;code&gt;useS&lt;/code&gt; without hesitation.&lt;/p&gt;

&lt;p&gt;You don’t have to agree with the ranking—but I hope it helps you discover new tools and revisit how you manage state in your own projects.&lt;/p&gt;




&lt;h2&gt;
  
  
  What’s Next for useS?
&lt;/h2&gt;

&lt;p&gt;The journey of &lt;code&gt;useS&lt;/code&gt; is just getting started. Right now, I’m actively working on adding &lt;strong&gt;built-in persistence&lt;/strong&gt; support for both web and mobile environments. The goal is to cover all the &lt;strong&gt;reasonable state management use cases&lt;/strong&gt; without sacrificing the simplicity that defines this library.&lt;/p&gt;

&lt;p&gt;Most of the core use cases are already tested and in production. I'm constantly looking for new patterns and edge cases to make sure future features are reliable and backwards compatible.&lt;/p&gt;

&lt;p&gt;Looking ahead, I’d also love to improve the &lt;strong&gt;developer experience&lt;/strong&gt; with better debugging tools—possibly a browser extension or even a lightweight VS Code plugin. There’s so much potential to make &lt;code&gt;useS&lt;/code&gt; even more powerful &lt;strong&gt;without losing its minimal API&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  How to Contribute
&lt;/h3&gt;

&lt;p&gt;If this sounds like a journey you'd like to be part of, I welcome contributions, ideas, and feedback from the community:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🧠 GitHub repository: &lt;a href="https://github.com/ChristBM/use-s" rel="noopener noreferrer"&gt;github.com/ChristBM/use-s&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;📚 Full documentation: &lt;a href="https://use-s-react.christbm.dev/" rel="noopener noreferrer"&gt;use-s-react.christbm.dev&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;🤝 Connect on LinkedIn: &lt;a href="https://www.linkedin.com/in/christian-boffill/" rel="noopener noreferrer"&gt;linkedin.com/in/christian-boffill&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;🐦 Message me on X (Twitter): &lt;a href="https://x.com/elboffill" rel="noopener noreferrer"&gt;x.com/elboffill&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Try it Yourself
&lt;/h3&gt;

&lt;p&gt;Whether you're building a simple counter or a complex multi-screen app, give &lt;code&gt;useS&lt;/code&gt; a try. You might find that managing state in React doesn’t have to be complicated after all.&lt;/p&gt;

</description>
      <category>react</category>
      <category>reactnative</category>
      <category>statemanagement</category>
      <category>frontend</category>
    </item>
    <item>
      <title>react state management</title>
      <dc:creator>Christian Boffill</dc:creator>
      <pubDate>Mon, 07 Jul 2025 02:33:52 +0000</pubDate>
      <link>https://forem.com/christbm/react-state-management-k34</link>
      <guid>https://forem.com/christbm/react-state-management-k34</guid>
      <description></description>
      <category>react</category>
      <category>state</category>
      <category>redux</category>
      <category>javascript</category>
    </item>
  </channel>
</rss>
