<?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>DEV Community: Iboro</title>
    <description>The latest articles on DEV Community by Iboro (@iboro).</description>
    <link>https://dev.to/iboro</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%2F197249%2Fd1d8786c-a301-43c0-9b0b-1a1af8736fbd.JPG</url>
      <title>DEV Community: Iboro</title>
      <link>https://dev.to/iboro</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/iboro"/>
    <language>en</language>
    <item>
      <title>Solidjs vs ReactJS - Part 1: Thinking in React, Thinking in Signals</title>
      <dc:creator>Iboro</dc:creator>
      <pubDate>Tue, 26 Aug 2025 08:35:59 +0000</pubDate>
      <link>https://dev.to/iboro/solidjs-vs-reactjs-part-1-thinking-in-react-thinking-in-signals-1ia2</link>
      <guid>https://dev.to/iboro/solidjs-vs-reactjs-part-1-thinking-in-react-thinking-in-signals-1ia2</guid>
      <description>&lt;p&gt;Frontend frameworks have exploded in the past decade, but React remains the dominant force. Enter &lt;strong&gt;SolidJS&lt;/strong&gt;, a newer, promising contender with a compelling pitch: React-like syntax, but with &lt;strong&gt;fine-grained reactivity&lt;/strong&gt; and &lt;strong&gt;no virtual DOM&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;In the past I've found myself weighing the pros and cons of possible frameworks so I know which would be best to use for a project based the unique project peculiarities. So just as a heads up, this article isn’t about which is better. Instead, it’s about &lt;strong&gt;how they think&lt;/strong&gt;—because understanding their mental models is the key to using either well.&lt;/p&gt;

&lt;p&gt;In this 3-part series, I’ll explore:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Part 1: &lt;strong&gt;Philosophy &amp;amp; Syntax&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Part 2: &lt;strong&gt;Performance, DX, and Tooling&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Part 3: &lt;strong&gt;When to Use What&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  🔹 SolidJS and React: Philosophical Core
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Framework&lt;/th&gt;
&lt;th&gt;Philosophy&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;React&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Declarative, component-based UI with a virtual DOM diffing system&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;SolidJS&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Fine-grained, signal-based reactivity with compiled JSX and no VDOM overhead&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;React asks:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;“How should this UI look given my state?”&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;SolidJS asks:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;“What should run when this value changes?”&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;React treats the &lt;strong&gt;component&lt;/strong&gt; as the unit of reactivity.&lt;br&gt;
SolidJS treats the &lt;strong&gt;signal (piece of state)&lt;/strong&gt; as the unit of reactivity.&lt;/p&gt;




&lt;h3&gt;
  
  
  🔹 JSX: Same Look, Different Behavior
&lt;/h3&gt;

&lt;p&gt;React and Solid both use JSX, but under the hood they behave very differently.&lt;/p&gt;

&lt;h4&gt;
  
  
  React Example:
&lt;/h4&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;useState&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;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;p&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&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;&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;p&lt;/span&gt;&lt;span class="p"&gt;&amp;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;count&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;Increment&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;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  SolidJS Equivalent:
&lt;/h4&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="nx"&gt;count&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;createSignal&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;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;p&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nf"&gt;count&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;lt;/&lt;/span&gt;&lt;span class="nt"&gt;p&lt;/span&gt;&lt;span class="p"&gt;&amp;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;count&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;count&lt;/span&gt;&lt;span class="p"&gt;()&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;Increment&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;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Key differences:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;In React, &lt;code&gt;count&lt;/code&gt; is a &lt;em&gt;value&lt;/em&gt;, and &lt;code&gt;setCount&lt;/code&gt; triggers a re-render.&lt;/li&gt;
&lt;li&gt;In Solid, &lt;code&gt;count&lt;/code&gt; is a &lt;em&gt;function&lt;/em&gt;, and calling it updates just what depends on it.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;React re-renders the whole component.&lt;br&gt;
Solid only updates the specific DOM nodes or computations tied to that signal.&lt;/p&gt;




&lt;h3&gt;
  
  
  🔹 Re-rendering &amp;amp; Reactivity Models
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Area&lt;/th&gt;
&lt;th&gt;React&lt;/th&gt;
&lt;th&gt;Solid&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Re-renders&lt;/td&gt;
&lt;td&gt;At component level&lt;/td&gt;
&lt;td&gt;At signal/statement level&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;State handling&lt;/td&gt;
&lt;td&gt;via &lt;code&gt;useState&lt;/code&gt;, &lt;code&gt;useReducer&lt;/code&gt;, context&lt;/td&gt;
&lt;td&gt;via &lt;code&gt;createSignal&lt;/code&gt;, &lt;code&gt;createEffect&lt;/code&gt;, &lt;code&gt;createStore&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;JSX compiled to&lt;/td&gt;
&lt;td&gt;&lt;code&gt;React.createElement()&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Optimized reactive DOM instructions&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Memoization&lt;/td&gt;
&lt;td&gt;Explicit (&lt;code&gt;useMemo&lt;/code&gt;, &lt;code&gt;React.memo&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;Mostly implicit via dependency tracking&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;React&lt;/strong&gt; optimizes &lt;strong&gt;what needs to re-render&lt;/strong&gt;.&lt;br&gt;
&lt;strong&gt;SolidJS&lt;/strong&gt; avoids re-rendering unless strictly necessary.&lt;/p&gt;




&lt;h3&gt;
  
  
  🔹 Why This Matters
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;For &lt;strong&gt;small to medium apps&lt;/strong&gt;, React’s model is intuitive and familiar.&lt;/li&gt;
&lt;li&gt;For &lt;strong&gt;high-performance or reactive-heavy apps&lt;/strong&gt;, Solid’s model gives you surgical control and lower overhead.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you're building an interface that updates frequently in small parts (e.g., dashboards, visualizations), Solid's fine-grained system can offer noticeable gains.&lt;/p&gt;




&lt;h3&gt;
  
  
  🧠 Final Thoughts
&lt;/h3&gt;

&lt;p&gt;React taught the world to "think in components."&lt;br&gt;
Solid challenges us to "think in signals."&lt;/p&gt;

&lt;p&gt;Understanding both helps you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Pick the right tool for your next project&lt;/li&gt;
&lt;li&gt;Architect better-performing UIs&lt;/li&gt;
&lt;li&gt;Appreciate the tradeoffs of reactivity models&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;👀 Coming Up in &lt;strong&gt;Part 2&lt;/strong&gt;:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Performance, DX, and Tooling — how both frameworks behave under pressure&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;📌 Have you tried SolidJS yet?&lt;br&gt;
What’s your favorite mental model for UI building?&lt;/p&gt;

&lt;p&gt;#ReactJS #SolidJS #FrontendEngineering #WebDev #Reactivity&lt;/p&gt;

</description>
      <category>programming</category>
      <category>javascript</category>
      <category>solidjs</category>
      <category>react</category>
    </item>
  </channel>
</rss>
