<?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: Neel-Vekariya</title>
    <description>The latest articles on DEV Community by Neel-Vekariya (@neel-vekariya).</description>
    <link>https://dev.to/neel-vekariya</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3968256%2Ff900b976-6eab-4295-bca9-6c8b6fd937e2.jpeg</url>
      <title>DEV Community: Neel-Vekariya</title>
      <link>https://dev.to/neel-vekariya</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/neel-vekariya"/>
    <language>en</language>
    <item>
      <title>If You Think React Is Free to Use, You Are Wrong.</title>
      <dc:creator>Neel-Vekariya</dc:creator>
      <pubDate>Wed, 04 Nov 2026 05:47:09 +0000</pubDate>
      <link>https://dev.to/neel-vekariya/if-you-think-react-is-free-to-use-you-are-wrong-4pia</link>
      <guid>https://dev.to/neel-vekariya/if-you-think-react-is-free-to-use-you-are-wrong-4pia</guid>
      <description>&lt;h2&gt;React Is Not Free. Let’s Clarify This.&lt;/h2&gt;

&lt;p&gt;
  When you use an abstraction over a complex task, it gives you convenience by moving complexity into a framework, which you learn through another mental model present in your mind.
&lt;/p&gt;

&lt;p&gt;
  This adds more concepts, like React mental model complexity, component/state complexity, and reconciliation/runtime complexity.
&lt;/p&gt;

&lt;p&gt;
  That’s why I say it: you move complexity into the mental model that is present in the mind.
&lt;/p&gt;





&lt;h3&gt;
  Another trade-off is control.
&lt;/h3&gt;

&lt;p&gt;
  You get maximum control when you work directly with DOM manipulation.
&lt;/p&gt;

&lt;p&gt;
  But in the case of React, control is given to React.
&lt;/p&gt;

&lt;p&gt;
  React manages all the operations, like insertion and deletion of DOM elements and updates to the DOM.
&lt;/p&gt;

&lt;p&gt;
  Now, you don’t have direct access to the DOM.
&lt;/p&gt;

&lt;p&gt;
  You exchange control for complexity.
&lt;/p&gt;





&lt;h3&gt;
  If you lose control, then you lose ownership.
&lt;/h3&gt;

&lt;p&gt;
  Now React becomes the owner of the rendering process.
&lt;/p&gt;

&lt;p&gt;
  It becomes a middleman between your application and the browser.
&lt;/p&gt;

&lt;p&gt;
  It creates the necessity to understand React’s rules.
&lt;/p&gt;

&lt;p&gt;
  That’s it.
&lt;/p&gt;

&lt;p&gt;
  Ummmm, really, don’t.
&lt;/p&gt;





&lt;h3&gt;
  Another big trade-off is runtime overhead and memory.
&lt;/h3&gt;

&lt;p&gt;
  Assume that React has some work pending to do.
&lt;/p&gt;

&lt;p&gt;
  Now, the question is: does React directly hand over this work to the browser?
&lt;/p&gt;

&lt;p&gt;
  Really, don’t.
&lt;/p&gt;

&lt;p&gt;
  It creates a virtual DOM, then uses reconciliation and updates the Fiber tree before reflecting the updates.
&lt;/p&gt;

&lt;p&gt;
  This can make the application slower due to runtime overhead.
&lt;/p&gt;

&lt;p&gt;
  Maintaining the React Fiber tree requires additional memory, which is not required in a vanilla JavaScript application due to its limited framework state.
&lt;/p&gt;





&lt;p&gt;
  In the case of React, it is not free to use.
&lt;/p&gt;

&lt;p&gt;
  You pay the cost through these trade-offs and mental models.
&lt;/p&gt;

</description>
      <category>react</category>
      <category>node</category>
      <category>webdev</category>
      <category>softwareengineering</category>
    </item>
    <item>
      <title>What Problem Does React Solve Better Than Other Alternatives</title>
      <dc:creator>Neel-Vekariya</dc:creator>
      <pubDate>Mon, 02 Nov 2026 04:34:30 +0000</pubDate>
      <link>https://dev.to/neel-vekariya/what-problem-does-react-solve-better-than-other-alternatives-2l22</link>
      <guid>https://dev.to/neel-vekariya/what-problem-does-react-solve-better-than-other-alternatives-2l22</guid>
      <description>&lt;p&gt;Did you ever think about what problem React actually tries to solve?&lt;/p&gt;

&lt;p&gt;So, the problem starts when you need to build a complex layout, and this layout depends on multiple states.&lt;/p&gt;

&lt;p&gt;Now, the problem starts. How do you keep this complex UI synchronized with changing application state without manually managing every DOM change?&lt;/p&gt;

&lt;p&gt;Before React, you needed to figure out which DOM elements were affected by a particular state change. Then, you needed to find those elements and modify them manually. You had to make sure every affected element was updated properly so the UI remained consistent with the application state.&lt;/p&gt;

&lt;p&gt;But React took a somewhat different approach. It changes the programming model, where the current state describes what the UI should look like. Now, React determines what needs to change and updates the host environment.&lt;/p&gt;

&lt;h2&gt;1. Direct DOM Manipulation&lt;/h2&gt;

&lt;p&gt;When the UI gets complicated and you need to change the UI in multiple places, the task becomes complicated because the developer has to manually maintain the relationships between application state and the UI.&lt;/p&gt;

&lt;p&gt;React manages DOM manipulation itself.&lt;/p&gt;

&lt;h2&gt;2. Declarative UI&lt;/h2&gt;

&lt;p&gt;In other frameworks or libraries, you need to explicitly say:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Do this.&lt;/li&gt;
  &lt;li&gt;Find that element.&lt;/li&gt;
  &lt;li&gt;Change its text.&lt;/li&gt;
  &lt;li&gt;Add the class.&lt;/li&gt;
  &lt;li&gt;Remove this button.&lt;/li&gt;
  &lt;li&gt;Show that button.&lt;/li&gt;
  &lt;li&gt;Hide that element.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is imperative UI.&lt;/p&gt;

&lt;p&gt;But React uses Declarative UI, where React takes responsibility for keeping the actual UI consistent with that declaration. This becomes the responsibility of the framework/runtime instead of the application's responsibility.&lt;/p&gt;

&lt;h2&gt;3. Change Propagation Problem&lt;/h2&gt;

&lt;p&gt;Change propagation means how you propagate this change throughout the UI.&lt;/p&gt;

&lt;p&gt;If you do this task manually, then there might be some chances of forgetting the changes in the UI.&lt;/p&gt;

&lt;p&gt;To eliminate this, React establishes a model where changes in state automatically re-render the relevant component tree and reconcile the result.&lt;/p&gt;

&lt;p&gt;These are the changes that React solves perfectly, but other frameworks or libraries miss out on.&lt;/p&gt;

</description>
      <category>react</category>
      <category>javascript</category>
      <category>softwareengineering</category>
      <category>webdev</category>
    </item>
    <item>
      <title>What Abstraction Does React Introduce?</title>
      <dc:creator>Neel-Vekariya</dc:creator>
      <pubDate>Sat, 31 Oct 2026 05:08:46 +0000</pubDate>
      <link>https://dev.to/neel-vekariya/what-abstraction-does-react-introduce-23h8</link>
      <guid>https://dev.to/neel-vekariya/what-abstraction-does-react-introduce-23h8</guid>
      <description>&lt;p&gt;
  JavaScript could already update the DOM.
&lt;/p&gt;

&lt;p&gt;
  So why did we need React?
&lt;/p&gt;

&lt;p&gt;
  In my previous post, we discussed the history of Web UI and how it
  evolved from HTML to React.
&lt;/p&gt;

&lt;p&gt;
  But there are many misconceptions about React.
&lt;/p&gt;

&lt;p&gt;
  One of them is that React removes DOM manipulation.
&lt;/p&gt;

&lt;p&gt;
  That’s not the proper way to understand it.
&lt;/p&gt;

&lt;p&gt;
  Instead, React abstracts DOM manipulation.
&lt;/p&gt;

&lt;p&gt;
  So, what is abstraction?
&lt;/p&gt;

&lt;p&gt;
  The bigger picture of React's abstraction is where you describe UI
  declaratively as a function of application state, organize UI into
  components, and then let React handle the synchronization between
  that description and the React rendering environment.
&lt;/p&gt;

&lt;p&gt;
  That is about the overall abstraction, which abstracts many
  underlying tasks.
&lt;/p&gt;

&lt;p&gt;
  Let's understand that.
&lt;/p&gt;

&lt;h3&gt;Abstractions&lt;/h3&gt;

&lt;h3&gt;1. DOM Mutations&lt;/h3&gt;

&lt;p&gt;
  DOM mutations mean abstracting low-level concepts and thinking
  about that abstraction.
&lt;/p&gt;

&lt;p&gt;
  Before React, you need to think about the DOM nodes, properties,
  DOM methods, and DOM events.
&lt;/p&gt;

&lt;p&gt;
  React abstracts that and introduces concepts like Components,
  Props, UI, and State.
&lt;/p&gt;

&lt;p&gt;
  This is similar to how higher-level programming languages
  abstract machine instructions.
&lt;/p&gt;

&lt;h3&gt;2. Declarative UI&lt;/h3&gt;

&lt;p&gt;
  Declarative means you describe what the result should be.
&lt;/p&gt;

&lt;p&gt;
  You are describing the desired UI.
&lt;/p&gt;

&lt;p&gt;
  You don't need to explicitly describe:
&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Create dashboard DOM.&lt;/li&gt;
  &lt;li&gt;Insert dashboard.&lt;/li&gt;
  &lt;li&gt;Update Button.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
  Instead, React tracks your declaration and manages the
  transition between them.
&lt;/p&gt;

&lt;p&gt;
  This separates "What" from "How".
&lt;/p&gt;

&lt;h3&gt;3. Component and State Abstraction&lt;/h3&gt;

&lt;p&gt;
  Before React, you needed to create reusable JavaScript
  functions intentionally.
&lt;/p&gt;

&lt;p&gt;
  But React makes UI itself composable.
&lt;/p&gt;

&lt;p&gt;
  This introduces the component abstraction.
&lt;/p&gt;

&lt;p&gt;
  State abstraction abstracts the tracking of what changed,
  which element depends on it, and what should I update.
&lt;/p&gt;

&lt;h3&gt;4. Abstraction as a Contract&lt;/h3&gt;

&lt;p&gt;
  In React, you describe the UI corresponding to the current state.
&lt;/p&gt;

&lt;p&gt;
  Now React is responsible for reconciling that description
  with the rendered UI.
&lt;/p&gt;

&lt;p&gt;
  Now the developer's responsibility becomes:
&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;What should the UI look like?&lt;/li&gt;
  &lt;li&gt;What state does it depend on?&lt;/li&gt;
  &lt;li&gt;How are components composed?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
  And React manages the responsibility for rendered work,
  reconciliation, scheduling, commit, and host environment updates.
&lt;/p&gt;

</description>
      <category>node</category>
      <category>webdev</category>
      <category>react</category>
      <category>softwareengineering</category>
    </item>
    <item>
      <title>What Existed Before React?</title>
      <dc:creator>Neel-Vekariya</dc:creator>
      <pubDate>Wed, 28 Oct 2026 06:06:09 +0000</pubDate>
      <link>https://dev.to/neel-vekariya/what-existed-before-react-2p46</link>
      <guid>https://dev.to/neel-vekariya/what-existed-before-react-2p46</guid>
      <description>&lt;p&gt;&lt;br&gt;
    If you are interested in reading about the evolution of technology,&lt;br&gt;
    then you might know that every technology has its own evolution phases,&lt;br&gt;
    where the technology evolves more and more over time.&lt;br&gt;
  &lt;/p&gt;


&lt;p&gt;&lt;br&gt;
    In the recent post, we discussed how the ecosystem evolved from a&lt;br&gt;
    low-level HTTP Node.js server to Express.&lt;br&gt;
  &lt;/p&gt;


&lt;p&gt;&lt;br&gt;
    Now this is the right time to discuss how web UI evolved from HTML to React.&lt;br&gt;
  &lt;/p&gt;

&lt;h3&gt;1. The Early Web: HTML Documents&lt;/h3&gt;

&lt;p&gt;
  In the early web, websites were primarily documents.
&lt;/p&gt;

&lt;p&gt;
  The page was mostly static.
&lt;/p&gt;

&lt;p&gt;
  If you wanted another page, the browser would request another HTML document.
&lt;/p&gt;

&lt;h3&gt;2. JavaScript and the DOM&lt;/h3&gt;

&lt;p&gt;
  Then JavaScript entered the picture.
&lt;/p&gt;

&lt;p&gt;
  JavaScript gave us the ability to execute code.
&lt;/p&gt;

&lt;p&gt;
  Now the browser wasn't just displaying static web pages or documents;
  it was also executing behavior, which led to interactive web pages.
&lt;/p&gt;

&lt;p&gt;
  At this time, the browser also exposed a programming interface called
  the DOM (Document Object Model).
&lt;/p&gt;

&lt;p&gt;
  The use of the DOM and JavaScript enabled changing elements without
  requesting a completely new HTML document.
&lt;/p&gt;

&lt;p&gt;
  At this time, if you wanted to change elements when a user interacted
  with a web page, the flow was like this:
&lt;/p&gt;

&lt;p&gt;
  A user action executes JavaScript, which finds and modifies the DOM
  elements, and the page becomes interactive.
&lt;/p&gt;

&lt;p&gt;
  This worked perfectly for websites.
&lt;/p&gt;

&lt;h3&gt;3. The Rise of Web Applications&lt;/h3&gt;

&lt;p&gt;
  But the web evolved from websites to applications, such as Gmail,
  Facebook, Google Maps, and online shopping.
&lt;/p&gt;

&lt;p&gt;
  Those applications have lots of state, and the application needs
  to behave according to that state.
&lt;/p&gt;

&lt;p&gt;
  Maintaining the UI according to the state using DOM manipulation
  became complicated.
&lt;/p&gt;

&lt;h3&gt;4. jQuery and Easier DOM Manipulation&lt;/h3&gt;

&lt;p&gt;
  To overcome this problem, developers started building JavaScript
  libraries to make browser programming easier.
&lt;/p&gt;

&lt;p&gt;
  One of them was jQuery.
&lt;/p&gt;

&lt;p&gt;
  jQuery simplified browser operations, which made working with
  the DOM easier.
&lt;/p&gt;

&lt;p&gt;
  It provided tools for DOM selection, DOM manipulation, events,
  AJAX, and animations.
&lt;/p&gt;

&lt;p&gt;
  Now you only needed to think about the elements that needed to change,
  and jQuery made selecting and modifying elements easier.
&lt;/p&gt;

&lt;h3&gt;5. The Era of JavaScript Frameworks&lt;/h3&gt;

&lt;p&gt;
  As applications became even more complex, developers wanted
  something more structured.
&lt;/p&gt;

&lt;p&gt;
  This led to the development of JavaScript frameworks and libraries
  around Model, View, and Controller.
&lt;/p&gt;

&lt;p&gt;
  The era of MVP, MVVM, and MV* began.
&lt;/p&gt;

&lt;p&gt;
  From this era, one important framework became influential:
  AngularJS, developed by Google.
&lt;/p&gt;

&lt;h3&gt;6. AngularJS and Two-Way Data Binding&lt;/h3&gt;

&lt;p&gt;
  It introduced concepts like controllers, scopes, services,
  dependency injection, directives, templates, and two-way binding.
&lt;/p&gt;

&lt;p&gt;
  It solved many problems, but large applications could still become
  difficult to reason about because of data flow and complex
  relationships between components and state.
&lt;/p&gt;

&lt;p&gt;
  In large applications, data flows in multiple directions.
&lt;/p&gt;

&lt;h3&gt;7. React and a Different Approach&lt;/h3&gt;

&lt;p&gt;
  At the peak of AngularJS, React came into the picture, taking a
  somewhat different approach to maintaining multi-directional data
  flow and complex relationships between components and state.
&lt;/p&gt;

&lt;p&gt;
  React's philosophy was different:
&lt;/p&gt;

&lt;p&gt;
  The UI should be a function of state.
&lt;/p&gt;

&lt;p&gt;
  Instead of thinking, change this element, change that element,
  update the template, and synchronize this model, you only need
  to think about what the UI should look like given this state.
&lt;/p&gt;

&lt;h3&gt;8. The Era of Interactive Web Applications&lt;/h3&gt;

&lt;p&gt;
  This helped create the era of highly interactive web applications.
&lt;/p&gt;

&lt;p&gt;
  Now web applications became more like desktop applications.
&lt;/p&gt;

&lt;h3&gt;9. Client-Side Rendering and Server-Side Rendering&lt;/h3&gt;

&lt;p&gt;
  One important thing is that this evolution was not only about
  client-side rendering; server-side rendering also evolved.
&lt;/p&gt;

&lt;p&gt;
  But we are only discussing the evolution of client-side rendering.
&lt;/p&gt;

</description>
      <category>web</category>
      <category>webdev</category>
      <category>node</category>
      <category>soft</category>
    </item>
    <item>
      <title>Why React exist?</title>
      <dc:creator>Neel-Vekariya</dc:creator>
      <pubDate>Mon, 26 Oct 2026 10:49:12 +0000</pubDate>
      <link>https://dev.to/neel-vekariya/why-react-exist-7a6</link>
      <guid>https://dev.to/neel-vekariya/why-react-exist-7a6</guid>
      <description>&lt;p&gt;Why React exist?&lt;/p&gt;

&lt;p&gt;When I started learning frontend then I picked React for frontend. Why, because everyone talks about React. To get into FOMO, I started learning React, and I also learned.&lt;/p&gt;

&lt;p&gt;I learned useState. I learned useEffect. I built stuff. It worked. And I think it's done.&lt;/p&gt;

&lt;p&gt;But somehow, one question exposed my real situation of what I learned. And the question is: why does it exist? I never thought about that type of question. I think it works, I learned frontend.&lt;/p&gt;

&lt;p&gt;Then I started to look at why things exist, why someone built this, what problem motivated them to build that, like a lens. Now I got my lens. Can you have one? Ask yourself: can I answer why React exists?&lt;/p&gt;

&lt;p&gt;Don't worry if you don't answer. We will discuss why React exists and which problem it tries to solve.&lt;/p&gt;

&lt;p&gt;So the main problem is to build and maintain complex, interactive user interfaces. Direct DOM manipulation becomes difficult as an application complexity grows.&lt;/p&gt;

&lt;p&gt;The problem is to build a button. The problem is how do I keep a large, constantly changing user interface with application state consistent without manually managing every DOM update?&lt;/p&gt;

&lt;p&gt;Using vanilla JavaScript, you can also build complex applications, so complexity itself is not the problem React was trying to solve.&lt;/p&gt;

&lt;p&gt;The difference is that, with vanilla JavaScript, you manually tell the browser what to do. You constantly say, find that card, change it, find button, change it. You are responsible for knowing which DOM elements need to change. For a huge application, this becomes difficult and complex. Means the problem is in complexity and maintainability.&lt;/p&gt;

&lt;p&gt;Now React comes to the picture. React is based on giving the new state what the UI should look like.&lt;/p&gt;

&lt;p&gt;React introduces Componentization. Use of componentization, you break the interface into components instead of one enormous file. Which gives ability of reuse that component. You need to build a component once and use multiple times in the application, which also gives you predictable UI, where the component should have one UI which shows different-different data, which makes UI more predictable.&lt;/p&gt;

&lt;p&gt;React works like a layer of abstraction over DOM nodes, events, element injection, element removal, and many more. With the use of layer, you work with components, props, state, and events, not with things in the layer below.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>softwareengineering</category>
      <category>react</category>
    </item>
    <item>
      <title>Virtual DOM</title>
      <dc:creator>Neel-Vekariya</dc:creator>
      <pubDate>Thu, 22 Oct 2026 05:16:20 +0000</pubDate>
      <link>https://dev.to/neel-vekariya/virtual-dom-pfp</link>
      <guid>https://dev.to/neel-vekariya/virtual-dom-pfp</guid>
      <description>&lt;p&gt;
  In the previous post, we discussed what React really is, the meaning of
  declarative UI, and its tree-like structure. Now, let’s continue that
  discussion further.
&lt;/p&gt;

&lt;p&gt;
  If you have worked with React, you have probably heard about
  &lt;strong&gt;state&lt;/strong&gt;, how and why it is used. Don’t worry if you don’t
  know about it yet.
&lt;/p&gt;

&lt;h2&gt;What is State in React?&lt;/h2&gt;

&lt;p&gt;
  &lt;strong&gt;State&lt;/strong&gt; is information that can change over time and affects
  what a component renders.
&lt;/p&gt;

&lt;p&gt;
  Now, assume React renders the component and the user clicks a button. The
  information about whether the button is clicked or not is stored in this
  state.
&lt;/p&gt;

&lt;p&gt;
  Whenever the user clicks the button, the information in the state changes
  from its default value to &lt;strong&gt;clicked&lt;/strong&gt;.
&lt;/p&gt;

&lt;p&gt;
  The state changes, so React schedules an update. The component is evaluated
  again. React compares the previous UI and the new UI to determine what
  needs to change in the actual DOM.
&lt;/p&gt;

&lt;h3&gt;Previous UI vs. New UI&lt;/h3&gt;

&lt;p&gt;
  Here, you can see the two UIs: the previous UI and the new UI. So, what is
  the difference between them?
&lt;/p&gt;

&lt;h2&gt;Understanding the Virtual DOM&lt;/h2&gt;

&lt;p&gt;
  To understand the difference, we need to discuss the
  &lt;strong&gt;Virtual DOM&lt;/strong&gt;.
&lt;/p&gt;

&lt;p&gt;
  Assume you already have a UI. Now, you perform some action, and the UI
  changes.
&lt;/p&gt;

&lt;p&gt;
  To track the changes in the UI, React uses an
  &lt;strong&gt;in-memory representation&lt;/strong&gt; of the updated UI.
&lt;/p&gt;

&lt;p&gt;
  To perform reconciliation, React compares both UIs: the previous UI that
  needs to be updated and the new UI created by React. This is commonly
  described as the &lt;strong&gt;Virtual DOM&lt;/strong&gt;.
&lt;/p&gt;

&lt;p&gt;
  &lt;strong&gt;Note:&lt;/strong&gt; I know this is an oversimplification, but to
  understand the idea of the Virtual DOM, this mental model is useful.
&lt;/p&gt;

&lt;p&gt;
  Using the Virtual DOM, React can determine the required changes instead of
  rebuilding the entire browser DOM every time the state updates.
&lt;/p&gt;

&lt;p&gt;
  The new UI we talked about is the Virtual DOM. Using reconciliation and the
  Virtual DOM, React updates the specific changes.
&lt;/p&gt;

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

&lt;p&gt;
  Now, I have used the word &lt;strong&gt;reconciliation&lt;/strong&gt; many times. So,
  what is reconciliation?
&lt;/p&gt;

&lt;p&gt;
  Reconciliation is the process React uses to determine how the current
  rendered tree, which is the &lt;strong&gt;host tree&lt;/strong&gt;, should change when
  new data or state produces a new tree, which is commonly referred to as the
  &lt;strong&gt;Virtual DOM&lt;/strong&gt;.
&lt;/p&gt;

&lt;p&gt;
  In a web application, the host environment is generally the
  &lt;strong&gt;browser DOM&lt;/strong&gt;. React is responsible for the UI programming
  model and reconciliation.
&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>softwareengineering</category>
      <category>react</category>
    </item>
    <item>
      <title>React, Full overview</title>
      <dc:creator>Neel-Vekariya</dc:creator>
      <pubDate>Tue, 20 Oct 2026 09:31:00 +0000</pubDate>
      <link>https://dev.to/neel-vekariya/react-full-overview-4n9e</link>
      <guid>https://dev.to/neel-vekariya/react-full-overview-4n9e</guid>
      <description>&lt;p&gt;&lt;br&gt;
    Recently, we discussed a lot about Express, like what it really is, what&lt;br&gt;
    abstraction it gives, what cost we pay, and many other things.&lt;br&gt;
  &lt;/p&gt;


&lt;p&gt;&lt;br&gt;
    Those perspectives give us a mental model to understand the technology in&lt;br&gt;
    depth, rather than just from a working level. I think we need to continue&lt;br&gt;
    that discussion further on other technologies.&lt;br&gt;
  &lt;/p&gt;


&lt;p&gt;So, I decided to continue those discussions with React.js.&lt;/p&gt;


&lt;p&gt;&lt;br&gt;
    Firstly, to understand those discussions deeply, you need some knowledge&lt;br&gt;
    about React. And I assume that you have that exposure.&lt;br&gt;
  &lt;/p&gt;


&lt;h2&gt;What Is React Actually?&lt;/h2&gt;


&lt;p&gt;&lt;strong&gt;Firstly, technical definition:&lt;/strong&gt;&lt;/p&gt;


&lt;p&gt;&lt;br&gt;
    React is a declarative, component-based JavaScript library for constructing&lt;br&gt;
    user interfaces from a tree of reusable components, where UI output is&lt;br&gt;
    derived from application state and React efficiently updates the DOM when&lt;br&gt;
    that state changes.&lt;br&gt;
  &lt;/p&gt;


&lt;p&gt;&lt;br&gt;
    The first technical word you see is declarative, and surely you are confused&lt;br&gt;
    by that word. So, what is declarative?&lt;br&gt;
  &lt;/p&gt;


&lt;p&gt;&lt;br&gt;
    To describe UI, there are two broad ways, which are imperative and&lt;br&gt;
    declarative.&lt;br&gt;
  &lt;/p&gt;


&lt;h3&gt;1) Imperative&lt;/h3&gt;


&lt;p&gt;&lt;br&gt;
    In imperative, you tell the computer how to do something. You explicitly&lt;br&gt;
    describe the operation and UI.&lt;br&gt;
  &lt;/p&gt;


&lt;h3&gt;2) Declarative&lt;/h3&gt;


&lt;p&gt;&lt;br&gt;
    This is amazing. In declarative, you describe what you want. You don’t&lt;br&gt;
    manually say, find that button, change this text, add class. Instead, you&lt;br&gt;
    describe what you want.&lt;br&gt;
  &lt;/p&gt;


&lt;p&gt;&lt;br&gt;
    React is based on declarative. You describe what UI you want, React&lt;br&gt;
    determines what changes are necessary.&lt;br&gt;
  &lt;/p&gt;


&lt;h3&gt;Now, what is a tree of reusable components?&lt;/h3&gt;


&lt;p&gt;&lt;br&gt;
    In React, we have a hierarchical structure to render individual components.&lt;br&gt;
    The top-level component, called the root component, renders first, which&lt;br&gt;
    then renders its child components. This becomes a structure like a tree,&lt;br&gt;
    where data flows in one direction, from the root, meaning the parent, to the&lt;br&gt;
    child.&lt;br&gt;
  &lt;/p&gt;


&lt;p&gt;&lt;br&gt;
    React provides mechanisms for building UI with components, props, state,&lt;br&gt;
    hooks, reconciliation, and event handling. The reconciliation is&lt;br&gt;
    interesting, which we talk later on in a specific post.&lt;br&gt;
  &lt;/p&gt;


&lt;p&gt;&lt;br&gt;
    You listen about component and also use this component, but what is&lt;br&gt;
    component actually?&lt;br&gt;
  &lt;/p&gt;


&lt;p&gt;&lt;br&gt;
    The component is commonly a JavaScript function that accepts inputs and&lt;br&gt;
    returns a description of the UI. With the use of multiple components, we&lt;br&gt;
    construct the User Interface.&lt;br&gt;
  &lt;/p&gt;

</description>
      <category>react</category>
      <category>webdev</category>
      <category>softwareengineering</category>
      <category>javascript</category>
    </item>
    <item>
      <title>The Cost of Using Express</title>
      <dc:creator>Neel-Vekariya</dc:creator>
      <pubDate>Mon, 19 Oct 2026 04:47:38 +0000</pubDate>
      <link>https://dev.to/neel-vekariya/the-cost-of-using-express-d9</link>
      <guid>https://dev.to/neel-vekariya/the-cost-of-using-express-d9</guid>
      <description>&lt;h1&gt;The Cost of Using Express&lt;/h1&gt;


&lt;p&gt;&lt;br&gt;
    If you started thinking about the engineering perspective, then you might know that every technology comes with cost.&lt;br&gt;
    Every technology gives you certain advantages, but it also introduces the trade-offs.&lt;br&gt;
  &lt;/p&gt;


&lt;p&gt;&lt;br&gt;
    The real engineering skill is not simply choosing technology because it solves a problem.&lt;br&gt;
    It is understanding what you gain, what you give up, and when those trade-offs are worth it.&lt;br&gt;
  &lt;/p&gt;


&lt;p&gt;Express is no different.&lt;/p&gt;


&lt;p&gt;&lt;br&gt;
    It gives a higher-level abstraction over Node.js’s &lt;code&gt;http&lt;/code&gt; module.&lt;br&gt;
    It makes routing, middleware, request processing, and composition much easier to work with.&lt;br&gt;
  &lt;/p&gt;


&lt;p&gt;But it also comes with cost.&lt;/p&gt;


&lt;p&gt;&lt;br&gt;
    To understand those trade-offs gives better thinking of why I use this technology in a project,&lt;br&gt;
    instead of how to use the technology.&lt;br&gt;
  &lt;/p&gt;


&lt;h2&gt;The Cost You Pay With:&lt;/h2&gt;


&lt;h3&gt;*) Control&lt;/h3&gt;


&lt;p&gt;&lt;br&gt;
    Express sits between Node.js HTTP primitives and the application.&lt;br&gt;
    When you use Express, you are no longer working directly with the raw HTTP server model.&lt;br&gt;
    Express decides how that request-processing abstraction works,&lt;br&gt;
    and your application has to work within that model.&lt;br&gt;
  &lt;/p&gt;


&lt;h3&gt;*) Hidden Work&lt;/h3&gt;


&lt;p&gt;&lt;br&gt;
    Express implements some work behind the scenes.&lt;br&gt;
    Something is happening that you didn’t explicitly write.&lt;br&gt;
    The general property of the abstraction is that the less code you write,&lt;br&gt;
    the more framework behavior you need to understand.&lt;br&gt;
  &lt;/p&gt;


&lt;h3&gt;*) Performance Cost&lt;/h3&gt;


&lt;p&gt;&lt;br&gt;
    Express adds a layer of processing on top of Node’s primitives.&lt;br&gt;
    That means additional function calls, middleware traversal, and routing logic.&lt;br&gt;
    This is additional CPU work and latency compared to doing everything directly at a lower level.&lt;br&gt;
    It doesn’t drop that much performance compared to database, external APIs, and networking latency.&lt;br&gt;
  &lt;/p&gt;


&lt;h3&gt;*) Complexity&lt;/h3&gt;


&lt;p&gt;&lt;br&gt;
    The behavior of the request depends on the middleware chain.&lt;br&gt;
    Middleware can modify &lt;code&gt;req&lt;/code&gt;, &lt;code&gt;res&lt;/code&gt;, and also terminate the request call.&lt;br&gt;
    Now, to understand why this behaves this way can require tracing in the middleware chain.&lt;br&gt;
  &lt;/p&gt;


&lt;h3&gt;*) Mental Complexity&lt;/h3&gt;


&lt;p&gt;&lt;br&gt;
    Now you use Express, so you have to understand Express itself.&lt;br&gt;
    Once you choose Express, you need knowledge of middleware, routing, router, middleware,&lt;br&gt;
    request/response APIs, framework conventions, and version-specific behavior.&lt;br&gt;
    To use Express, you don’t eliminate complexity;&lt;br&gt;
    you move some complexity into the framework and its mental model.&lt;br&gt;
  &lt;/p&gt;


&lt;h3&gt;*) Dependency Cost&lt;/h3&gt;


&lt;p&gt;&lt;br&gt;
    Express becomes part of your application dependency graph.&lt;br&gt;
    Now you need to care about:&lt;br&gt;
  &lt;/p&gt;


&lt;ul&gt;

    &lt;li&gt;Express versions&lt;/li&gt;

    &lt;li&gt;Compatibility&lt;/li&gt;

    &lt;li&gt;Security updates&lt;/li&gt;

    &lt;li&gt;Migration between major updates&lt;/li&gt;

  &lt;/ul&gt;


&lt;p&gt;&lt;br&gt;
    The abstraction works beautifully until a problem crosses the abstraction boundary.&lt;br&gt;
  &lt;/p&gt;

</description>
      <category>webdev</category>
      <category>softwaredevelopment</category>
      <category>node</category>
      <category>express</category>
    </item>
    <item>
      <title>What Does Express.js Abstract Away?</title>
      <dc:creator>Neel-Vekariya</dc:creator>
      <pubDate>Wed, 14 Oct 2026 06:00:12 +0000</pubDate>
      <link>https://dev.to/neel-vekariya/what-does-expressjs-abstract-away-59c8</link>
      <guid>https://dev.to/neel-vekariya/what-does-expressjs-abstract-away-59c8</guid>
      <description>&lt;p&gt;In the past, we talked about the general deeper understanding about what Express.js actually is, what problem it tries to solve, and what existed before Express. But another question is: what abstraction does it introduce?&lt;/p&gt;

&lt;p&gt;If you've read my previous posts, you know that Express.js provides an abstraction over Node.js's HTTP module. In this post, we'll go deeper and explore what those abstractions actually are.&lt;/p&gt;

&lt;p&gt;The most common central abstraction, the low-level processing of an HTTP request into a programmable pipeline of middleware and routes. This is a broad perspective of the Express.js abstraction. But this broad abstraction has many small abstractions. And those abstractions are:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;*) Route Matching&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Express abstracts manually route matching. It takes responsibility for matching routes for incoming requests. It abstracts that task and gives a simple way to use routes without the complexity of matching routes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;*) Route Parameters:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The next abstraction Express.js provides is parsing request parameters for us, so we don't have to handle them manually. It hides the mechanics of matching and extracting that value. Without it, you might have to manually parse the parameters.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;*) Request Processing:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Express abstracts raw HTTP request information into data that is easily accessible to the application. The task of processing raw information of the request is abstracted by Express.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;*) Middleware:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Express allows you to represent cross-cutting request processing as reasonable functions. Instead of manually deciding everything inside one HTTP callback, it gives functionality to compose the application out of functions that process the request sequentially.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;*) Composition Model:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Express gives you compose behaviour where each piece has a focused responsibility. That’s much more scalable than putting everything into one request.&lt;/p&gt;

&lt;p&gt;Express makes application development easier by abstracting some of the complexity, but it does not abstract away everything involved in building an application.&lt;/p&gt;

&lt;p&gt;It doesn’t decide:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;How my business should work&lt;/li&gt;
&lt;li&gt;How I should store users&lt;/li&gt;
&lt;li&gt;Which database I should use&lt;/li&gt;
&lt;li&gt;How an order should be calculated&lt;/li&gt;
&lt;li&gt;How payment should work&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>javascript</category>
      <category>webdev</category>
      <category>softwareengineering</category>
      <category>express</category>
    </item>
    <item>
      <title>What Existed Before Express?</title>
      <dc:creator>Neel-Vekariya</dc:creator>
      <pubDate>Sat, 10 Oct 2026 04:04:14 +0000</pubDate>
      <link>https://dev.to/neel-vekariya/what-existed-before-express-2b38</link>
      <guid>https://dev.to/neel-vekariya/what-existed-before-express-2b38</guid>
      <description>&lt;p&gt;I already made a post about what Express really is and which problem Express tries to solve. But do you think about what existed before Express? How did developers build servers in the JavaScript ecosystem?&lt;/p&gt;

&lt;p&gt;I had this question, and I found out a really interesting thing.&lt;/p&gt;

&lt;p&gt;In the JavaScript ecosystem, Node.js was released in 2009, and its standard library already allowed developers to create HTTP servers directly.&lt;/p&gt;

&lt;p&gt;Think about the complexity and repetition of code for building servers using the Node.js HTTP module. I saw code for handling different routes, where you handle different types of requests and routes using the if-else block.&lt;/p&gt;

&lt;p&gt;Like this:&lt;/p&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;server&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;http&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;createServer&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;

  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;method&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;GET&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;url&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;

    &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;writeHead&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Content-Type&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;text/plain&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;

    &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;end&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Home page&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;method&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;GET&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;url&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/about&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;

    &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;writeHead&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Content-Type&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;text/plain&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;

    &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;end&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;About page&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;

    &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;writeHead&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;404&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Content-Type&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;text/plain&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;

    &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;end&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;404 - Page not found&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&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;You repetitively write which data type you send and what the actual data (response) will be sent by the server. And this process becomes cumbersome as the application grows.&lt;/p&gt;

&lt;p&gt;Developers therefore built higher-level abstractions around Node.js HTTP capabilities, which are frameworks and libraries. Express is one of those abstractions and became particularly influential.&lt;/p&gt;

&lt;p&gt;Node.js brought JavaScript to the server, and Express provided a popular web framework abstraction for that environment.&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>softwareengineering</category>
      <category>webdev</category>
      <category>node</category>
    </item>
    <item>
      <title>The Engineering Problem Express Tries to Solve</title>
      <dc:creator>Neel-Vekariya</dc:creator>
      <pubDate>Wed, 07 Oct 2026 14:36:07 +0000</pubDate>
      <link>https://dev.to/neel-vekariya/the-engineering-problem-express-tries-to-solve-57bd</link>
      <guid>https://dev.to/neel-vekariya/the-engineering-problem-express-tries-to-solve-57bd</guid>
      <description>&lt;h1&gt;The Engineering Problem Express Tries to Solve&lt;/h1&gt;

&lt;p&gt;If you don’t know, we can also build an HTTP application using Node.js low-level HTTP APIs. The application is working properly and able to handle requests and generate responses. So, why do we need to build Express?&lt;/p&gt;

&lt;p&gt;The reason behind that is that building an HTTP application using Node.js low-level HTTP APIs becomes repetitive and cumbersome (difficult) as the application grows. The repetition of writing code for request parsing, routing, middleware, and handling the logic becomes more complex.&lt;/p&gt;

&lt;h2&gt;The Problem Express Solves:&lt;/h2&gt;

&lt;p&gt;How can we build an HTTP application on top of Node.js without repeatedly implementing the same request parsing, routing, middleware, and response handling logic ourselves?&lt;/p&gt;

&lt;p&gt;Express introduces reusable abstractions for those common problems. In application building, the repeated infrastructure, such as routing, middleware composition, request parsing, response handling, and error handling, is directly provided by those reusable abstractions.&lt;/p&gt;

&lt;p&gt;If you are confused by reusable abstractions, don’t worry. It simply means a ready-made piece of code or concept that solves a common problem.&lt;/p&gt;

&lt;p&gt;This reusable abstraction gives us the ability to write actual business logic instead of writing complex application infrastructure for every project.&lt;/p&gt;

&lt;p&gt;This is the actual problem that Express tries to solve. And it exists to provide a higher-level abstraction over Node.js low-level HTTP APIs.&lt;/p&gt;

</description>
      <category>express</category>
      <category>node</category>
      <category>webdev</category>
      <category>softwareengineering</category>
    </item>
    <item>
      <title>What is Express, really?</title>
      <dc:creator>Neel-Vekariya</dc:creator>
      <pubDate>Sun, 04 Oct 2026 06:46:33 +0000</pubDate>
      <link>https://dev.to/neel-vekariya/what-is-express-really-hn8</link>
      <guid>https://dev.to/neel-vekariya/what-is-express-really-hn8</guid>
      <description>&lt;h1&gt;What is Express, really?&lt;/h1&gt;

&lt;p&gt;In my last blog, I shared some of my personal experience and the thinking that led me from &lt;strong&gt;“How?” to “Why?”&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;So, I’m going to assume you already know the “how” of Express.&lt;/p&gt;

&lt;p&gt;Now, let’s start understanding the “why” behind Express.&lt;/p&gt;

&lt;h2&gt;First, let’s understand what Express really is.&lt;/h2&gt;

&lt;p&gt;As per the technical definition:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Express.js is a minimal, unopinionated web application framework for Node.js that provides abstractions and APIs for handling HTTP requests, generating HTTP responses, routing, middleware composition, and building web/API applications.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;🤦‍♂️🤦‍♂️ Very technical, right?&lt;/p&gt;

&lt;p&gt;Don’t worry, I’ll explain it to you.&lt;/p&gt;

&lt;p&gt;In simple terms, Express.js is a web application framework that provides the bare minimum (&lt;strong&gt;small set of core abstractions&lt;/strong&gt;) tools to build your applications while giving you maximum freedom in how you structure your application.&lt;/p&gt;

&lt;p&gt;It does not force you to follow a specific file structure.&lt;/p&gt;

&lt;p&gt;It provides tools for handling requests, responses, routing, and other application tasks instead of making you manually handle those lower-level tasks.&lt;/p&gt;

&lt;p&gt;Now you get the idea of what Express is.&lt;/p&gt;

&lt;p&gt;But another confusing phrase came up:&lt;/p&gt;

&lt;h2&gt;“Lower-level application tasks.”&lt;/h2&gt;

&lt;p&gt;What does that actually mean?&lt;/p&gt;

&lt;p&gt;To understand this, you first need to understand &lt;strong&gt;what problem Express is solving.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;And that is another big topic, which we’ll discuss in the next post.&lt;/p&gt;

&lt;p&gt;For now, assume there are some repeated tasks involved in building and setting up HTTP APIs.&lt;/p&gt;

&lt;p&gt;Express handles many of these tasks under the hood.&lt;/p&gt;

&lt;p&gt;This provides a layer of abstraction over those difficult tasks and gives developers a convenient way to work with:&lt;/p&gt;

&lt;h2&gt;1. Routing:&lt;/h2&gt;

&lt;p&gt;Deciding which code should handle a particular URL and HTTP method.&lt;/p&gt;

&lt;h2&gt;2. Middleware:&lt;/h2&gt;

&lt;p&gt;Creating a pipeline of functions that process requests and responses.&lt;/p&gt;

&lt;h2&gt;3. Request Handling:&lt;/h2&gt;

&lt;p&gt;Handling parameters, headers, and request bodies.&lt;/p&gt;

&lt;h2&gt;4. Response Handling:&lt;/h2&gt;

&lt;p&gt;Sending JSON, HTML, status codes, and other data.&lt;/p&gt;

&lt;h2&gt;5. Error Handling:&lt;/h2&gt;

&lt;p&gt;Handling errors consistently within the application.&lt;/p&gt;





&lt;p&gt;But this brings us to another question:&lt;/p&gt;

&lt;h2&gt;What problem was Express actually trying to solve?&lt;/h2&gt;

&lt;p&gt;That’s what we’ll understand in the next blog.&lt;/p&gt;

</description>
      <category>express</category>
      <category>webdev</category>
      <category>softwareengineering</category>
      <category>node</category>
    </item>
  </channel>
</rss>
