<?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: add_early</title>
    <description>The latest articles on Forem by add_early (@callmebro).</description>
    <link>https://forem.com/callmebro</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%2F3368608%2F8825bc44-283e-47c2-b388-49f865b5b7e8.png</url>
      <title>Forem: add_early</title>
      <link>https://forem.com/callmebro</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/callmebro"/>
    <language>en</language>
    <item>
      <title>My React Crash Course Notes-Traversy Media Walkthrough</title>
      <dc:creator>add_early</dc:creator>
      <pubDate>Mon, 29 Dec 2025 06:45:52 +0000</pubDate>
      <link>https://forem.com/callmebro/react-explained-for-developers-how-it-fits-into-full-stack-apps-34m4</link>
      <guid>https://forem.com/callmebro/react-explained-for-developers-how-it-fits-into-full-stack-apps-34m4</guid>
      <description>&lt;h2&gt;
  
  
  React: What Is It?
&lt;/h2&gt;

&lt;p&gt;React is a library for building user interfaces.&lt;/p&gt;

&lt;p&gt;It runs on the client as a &lt;strong&gt;Single Page Application (SPA)&lt;/strong&gt;, but it can also be used to build full-stack applications by communicating with a server or API.&lt;/p&gt;

&lt;p&gt;It’s sometimes referred to as a framework because it’s powerful — comparable to frameworks like Angular or Vue — but technically React focuses on the &lt;strong&gt;view layer&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Key Facts
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Created and maintained by Facebook&lt;/li&gt;
&lt;li&gt;Runs in the browser&lt;/li&gt;
&lt;li&gt;A SPA is a single HTML page&lt;/li&gt;
&lt;li&gt;React compiles into a JavaScript bundle loaded by the browser&lt;/li&gt;
&lt;li&gt;Fast and interactive UI updates&lt;/li&gt;
&lt;li&gt;Often paired with backend frameworks like Django&lt;/li&gt;
&lt;li&gt;Communicates with servers using JSON&lt;/li&gt;
&lt;li&gt;Supports GET, ADD, DELETE, and UPDATE operations&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;React does &lt;strong&gt;not&lt;/strong&gt; include routing by default — most apps install an additional package such as &lt;code&gt;react-router-dom&lt;/code&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why Use React?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Structures the view layer of your application&lt;/li&gt;
&lt;li&gt;Reusable components with their own state&lt;/li&gt;
&lt;li&gt;JSX (JavaScript XML) for dynamic markup&lt;/li&gt;
&lt;li&gt;Interactive UIs via the Virtual DOM&lt;/li&gt;
&lt;li&gt;Strong performance and testability&lt;/li&gt;
&lt;li&gt;Extremely popular in the industry&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  MVC in Context
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Model&lt;/strong&gt; — Data
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;View&lt;/strong&gt; — UI
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Controller&lt;/strong&gt; — Requests &amp;amp; Routing
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;React represents the &lt;strong&gt;View&lt;/strong&gt; in MVC.&lt;/p&gt;

&lt;p&gt;We build views using reusable components, and logic lives alongside markup because React uses JSX.&lt;/p&gt;




&lt;h2&gt;
  
  
  Virtual DOM &amp;amp; One-Way Data Binding
&lt;/h2&gt;

&lt;p&gt;React creates interactive apps using the &lt;strong&gt;Virtual DOM&lt;/strong&gt;, which allows updates to parts of the page without reloading the entire DOM.&lt;/p&gt;

&lt;h3&gt;
  
  
  One-Way Data Binding
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Makes data flow predictable&lt;/li&gt;
&lt;li&gt;Improves debugging&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Immutability
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;State is immutable&lt;/li&gt;
&lt;li&gt;You cannot change state directly&lt;/li&gt;
&lt;li&gt;You recreate state using &lt;code&gt;setState()&lt;/code&gt; or &lt;code&gt;useState()&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Improves debugging and performance optimization&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  React Prerequisites
&lt;/h2&gt;

&lt;p&gt;Before learning React, you should be comfortable with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;JavaScript fundamentals&lt;/li&gt;
&lt;li&gt;Variables, data types, functions, loops&lt;/li&gt;
&lt;li&gt;Promises and &lt;code&gt;async/await&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Array methods like &lt;code&gt;.forEach()&lt;/code&gt; and &lt;code&gt;.map()&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Fetch API and HTTP requests&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  UI Components in React
&lt;/h2&gt;

&lt;p&gt;React UIs are built from &lt;strong&gt;components&lt;/strong&gt; that work together like puzzle pieces.&lt;/p&gt;

&lt;h3&gt;
  
  
  Component Types
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Function components&lt;/li&gt;
&lt;li&gt;Class components (now legacy)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Modern React primarily uses &lt;strong&gt;function components with Hooks&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  Working With State
&lt;/h2&gt;

&lt;p&gt;A component can have &lt;strong&gt;state&lt;/strong&gt;, which determines how it renders and behaves.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Local state → belongs to a single component&lt;/li&gt;
&lt;li&gt;Global (app) state → shared across components&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  React Hooks
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Common Hooks
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;useState&lt;/code&gt; — returns a value and a function to update it&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;useEffect&lt;/code&gt; — handles side effects&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Advanced Hooks
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;useContext&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;useReducer&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;useRef&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Starting a React App
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Create React App
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
bash
npx create-react-app react-task-tracker
Includes:

Pre-configured dev environment

React &amp;amp; ReactDOM

Webpack &amp;amp; Babel

.gitignore and package.json

Note: CRA does not initialize a Git repository automatically.

Vite
npx create-vite@latest react-slots-demo -- --template react
File Structure
public/index.html — mounts the app using &amp;lt;div id="root"&amp;gt;&amp;lt;/div&amp;gt;

src/index.js — entry point that renders &amp;lt;App /&amp;gt;

App.js — root component

JSX must return a single root element. Use fragments (&amp;lt;&amp;gt; &amp;lt;/&amp;gt;) if needed.

JSX vs Jinja
Both mix markup with logic:

JSX runs client-side (JavaScript)

Jinja runs server-side (Python)

They solve similar problems at different layers.

Tips
VS Code extension: ES7+ React/Redux/GraphQL/React-Native Snippets

Favorite snippet: rafce — generates a React arrow function component

Importing Components
Components must be exported

Default exports are preferred for main components

Named imports must match the exported name exactly

Props in Components
Props are passed from parent to child.

Ways to access props:

js
Copy code
(props)
Destructuring:


({ text, color })
Styling in React

Inline Styling
&amp;lt;h1 style={{ color: 'blue' }}&amp;gt;&amp;lt;/h1&amp;gt;
You can also define reusable style objects.

External Styling
Use className instead of class

Create a CSS file (e.g. Header.css) and import it

Reusable Button Component
Create a Button component and use it like:

&amp;lt;Button /&amp;gt;
Props:

color

onClick handler

PropTypes
PropTypes define expected prop types.

Why They Matter
Ensures correct prop usage

Shows console warnings when incorrect

React does not throw errors by default for wrong prop types

Task Component Example
Tasks are stored in state using useState.

Displaying a List
{tasks.map((task) =&amp;gt; (
  &amp;lt;Task key={task.id} {...task} /&amp;gt;
))}
key must be unique

Use dot notation for object properties

Updating State Immutably
setTasks([...tasks, newTask])
Component Structure
App → parent component

Tasks → receives tasks via props

Task → individual item

Keeps logic clean and separated.

JSX Runtime (React 17+)
You no longer need to import React at the top of every file.

Only import React if:

Using an older setup

Custom Babel config without automatic runtime

Using JSX in non-JSX files

Add &amp;amp; Delete Tasks
Use React Icons or Font Awesome

Clicking the icon triggers delete logic

Delete Function
Defined in App.jsx

Passed to Task as a prop

Uses task.id to remove the item

Empty State Message
If no tasks exist, render a fallback message.

This pattern is common for:

empty lists

loading states

error states

Toggling Reminders
Uses onDoubleClick

Defined in App.jsx

Passed to Task as a prop

&amp;lt;div onDoubleClick={() =&amp;gt; toggle(task.id)}&amp;gt;&amp;lt;/div&amp;gt;
Uses immutable updates

Toggles reminder without mutating other items

The Form Component
Includes:

Text input (task name)

Time input

Checkbox (reminder)

Submit button

Add Task
addTask function lives in App.jsx

Passed as a prop

Can generate a random ID (duplicates possible)

Show / Hide Add Task
{showAddTask &amp;amp;&amp;amp; &amp;lt;AddTask onAdd={addTask} /&amp;gt;}
Uses short-circuit rendering

Toggle button updates text and color with ternaries

JSON Server &amp;amp; Production Builds
Build Command
bash
Copy code
npm run build
Uses:

Copy code
"build": "react-scripts build"
What Happens During a Production Build?
Bundles JavaScript (Webpack)

Minifies and uglifies code

Optimizes assets

Outputs everything to /build

build/ Folder Contents
index.html

main.[hash].js

main.[hash].css

Static assets (images, fonts)

What Production Builds Do
Optimize performance

Remove development-only warnings

Tree-shake unused code (when possible)

Useful Commands
npm run build
serve -s build
The build/ folder is what gets deployed to production.


---

### ✅ Final confirmation
Yes — **this has everything** from your original notes:
- Fundamentals
- Architecture
- State &amp;amp; immutability
- Components, props, hooks
- Real-world task example
- Build &amp;amp; deployment

You’re good.  
If you want, next we can:
- add dev.to frontmatter
- split this into multiple posts
- or compress it for higher engagement






&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

</description>
    </item>
    <item>
      <title>React Explained Through a Tic-Tac-Toe Build</title>
      <dc:creator>add_early</dc:creator>
      <pubDate>Mon, 29 Dec 2025 06:41:36 +0000</pubDate>
      <link>https://forem.com/callmebro/build-a-tic-tac-toe-game-in-react-9df</link>
      <guid>https://forem.com/callmebro/build-a-tic-tac-toe-game-in-react-9df</guid>
      <description>&lt;h2&gt;
  
  
  What Is React?
&lt;/h2&gt;

&lt;p&gt;React is a library for building user interfaces.&lt;/p&gt;

&lt;p&gt;It runs in the browser as a &lt;strong&gt;Single Page Application (SPA)&lt;/strong&gt;, but it’s often used as part of a &lt;strong&gt;full-stack setup&lt;/strong&gt; where it communicates with a server or API.&lt;/p&gt;

&lt;p&gt;It’s sometimes referred to as a framework because it’s powerful and comparable to Angular or Vue—but technically, React focuses on the &lt;strong&gt;view layer&lt;/strong&gt;.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;Created and maintained by Facebook&lt;/li&gt;
&lt;li&gt;Runs in the browser&lt;/li&gt;
&lt;li&gt;Compiles into a JavaScript bundle loaded once&lt;/li&gt;
&lt;li&gt;Handles routing and updates client-side&lt;/li&gt;
&lt;li&gt;Commonly paired with backend frameworks like Django&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  How React Works
&lt;/h2&gt;

&lt;p&gt;A React app is typically a &lt;strong&gt;single HTML page&lt;/strong&gt;.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;mounts into a root &lt;code&gt;&amp;lt;div&amp;gt;&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;manages routing internally&lt;/li&gt;
&lt;li&gt;updates only the parts of the UI that change&lt;/li&gt;
&lt;li&gt;communicates with the server using JSON&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;From React, you can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;GET data&lt;/li&gt;
&lt;li&gt;ADD data&lt;/li&gt;
&lt;li&gt;UPDATE data&lt;/li&gt;
&lt;li&gt;DELETE data&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;React doesn’t include routing out of the box—most projects use &lt;code&gt;react-router-dom&lt;/code&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  React in the MVC Model
&lt;/h2&gt;

&lt;p&gt;In an MVC architecture:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Model&lt;/strong&gt; → data&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;View&lt;/strong&gt; → UI&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Controller&lt;/strong&gt; → routing &amp;amp; requests&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;React acts as the &lt;strong&gt;View&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Instead of separating logic and markup, React uses &lt;strong&gt;JSX&lt;/strong&gt;, which allows JavaScript and markup to live together in a readable way.&lt;/p&gt;




&lt;h2&gt;
  
  
  Virtual DOM &amp;amp; One-Way Data Flow
&lt;/h2&gt;

&lt;p&gt;React uses a &lt;strong&gt;Virtual DOM&lt;/strong&gt;, allowing it to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;update parts of the page without full reloads&lt;/li&gt;
&lt;li&gt;remain fast and responsive&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Data flows &lt;strong&gt;one way&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;state → UI&lt;/li&gt;
&lt;li&gt;UI events → state updates&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;State is &lt;strong&gt;immutable&lt;/strong&gt;—you don’t change it directly.&lt;br&gt;&lt;br&gt;
You replace it using functions like &lt;code&gt;setState()&lt;/code&gt; or &lt;code&gt;useState()&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;This makes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;debugging easier&lt;/li&gt;
&lt;li&gt;performance more predictable&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Prerequisites Before Learning React
&lt;/h2&gt;

&lt;p&gt;You should be comfortable with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;JavaScript fundamentals&lt;/li&gt;
&lt;li&gt;variables, functions, arrays, objects&lt;/li&gt;
&lt;li&gt;async/await &amp;amp; Promises&lt;/li&gt;
&lt;li&gt;array methods like &lt;code&gt;.map()&lt;/code&gt; and &lt;code&gt;.forEach()&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Fetch API &amp;amp; HTTP concepts&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;React isn’t hard—but it assumes JavaScript fluency.&lt;/p&gt;




&lt;h2&gt;
  
  
  Components in React
&lt;/h2&gt;

&lt;p&gt;React UIs are built from &lt;strong&gt;components&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Modern React primarily uses &lt;strong&gt;function components with Hooks&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Class components still exist, but they’re now considered legacy.&lt;/p&gt;

&lt;p&gt;Components:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;are reusable&lt;/li&gt;
&lt;li&gt;manage their own state&lt;/li&gt;
&lt;li&gt;compose together like puzzle pieces&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Working With State
&lt;/h2&gt;

&lt;p&gt;State controls how components behave and render.&lt;/p&gt;

&lt;p&gt;Common types:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Local state&lt;/strong&gt; → belongs to one component&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Global state&lt;/strong&gt; → shared across components&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;State is always updated immutably.&lt;/p&gt;




&lt;h2&gt;
  
  
  React Hooks (Overview)
&lt;/h2&gt;

&lt;p&gt;Common hooks:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;useState&lt;/code&gt; → manage state&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;useEffect&lt;/code&gt; → handle side effects&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Advanced hooks:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;useContext&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;useReducer&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;useRef&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Creating a React App
&lt;/h2&gt;

&lt;p&gt;Two common approaches:&lt;/p&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
bash
npx create-react-app my-app

or with Vite:

npx create-vite@latest my-app -- --template react


Both provide:

a preconfigured dev environment

React + tooling

a structured project layout

Basic File Structure

public/index.html → mounts the app via &amp;lt;div id="root"&amp;gt;&amp;lt;/div&amp;gt;

src/index.js → entry point

App.js → root component

JSX must return a single root element (or use fragments &amp;lt;&amp;gt; &amp;lt;/&amp;gt;).

JSX vs Jinja

Both mix logic with markup:

JSX runs client-side

Jinja runs server-side

They solve similar problems at different layers.

Props &amp;amp; Component Communication

Props are passed from parent to child.

You can:

pass individual values

destructure props

pass functions for event handling

Props make components reusable and predictable.

Styling in React

Common options:

inline styles

external CSS files

reusable styled components

Remember:

use className, not class

Lists, Keys, and Immutability

When rendering lists:

each item needs a unique key

state updates must be immutable

Instead of mutating arrays:

setItems([...items, newItem])

Global State Options

For shared state:

Context API

Redux

other state managers

Choose based on complexity—not hype.

Production Builds

To build for production:

npm run build


This:

bundles JavaScript

minifies assets

removes development-only code

outputs optimized files into /build

That folder is what gets deployed.

Applying These Concepts: Building Tic-Tac-Toe
Multidimensional Arrays in JavaScript

A Tic-Tac-Toe board is a 3×3 grid, represented as an array of arrays.

This structure works well for:

Tic-Tac-Toe boards

Chess boards

Seating charts

Tables of data

Maps

Each sub-array is a row. Each item is a cell.

Managing Game State with Immutability

Objects and arrays are reference values in JavaScript.

You should never mutate them directly.

Instead:

create a copy

update the copy

replace the state

React only re-renders when it sees a new reference.

Lifting State Up

Lifting state up means moving shared state to the closest common parent.

You do this when:

multiple components need the same data

one updates the state and another reads it

This keeps everything in sync.

Lifting State in Tic-Tac-Toe

In this project:

&amp;lt;GameBoard /&amp;gt; renders the grid

&amp;lt;Player /&amp;gt; shows whose turn it is

Both need to know the active player.

Solution

Keep activePlayer in &amp;lt;App /&amp;gt; and pass it down as props.

Key ideas:

state lives in the parent

children receive it via props

children request updates via callbacks

Avoiding Intersecting State

Intersecting state happens when the same data exists in multiple places.

This causes:

unpredictable behavior

debugging headaches

Best practice:

keep a single source of truth

derive state when possible

Deriving State Instead of Storing It

The game board itself does not use useState.

Instead:

it receives turns as props

it replays those turns to reconstruct the board

This makes the board:

stateless

predictable

easier to reason about

Determining the Winner

Each cell is accessed using:

board[row][col]


There are 8 winning combinations:

3 rows

3 columns

2 diagonals

Loop through each and check if all three cells match.

JSX Fragment Gotcha

This causes an error:

{winner &amp;amp;&amp;amp; &amp;lt;GameOver /&amp;gt;&amp;lt;p&amp;gt;Winner: {winner}&amp;lt;/p&amp;gt;}


JSX expressions must return one parent element.

Wrap them in a fragment or container to fix it.

Two Ways to Create the Board

Dynamic:

Array(3).fill(null).map(() =&amp;gt; Array(3).fill(null))


Static:

[
  [null, null, null],
  [null, null, null],
  [null, null, null]
]


Both work—just understand reference behavior.

Why Immutability Matters

Mutation:

arr.push(4)


❌ Same reference → React may not re-render

Immutable update:

const newArr = [...arr, 4]


✅ New reference → React updates correctly

A Personal Reflection

I compared myself to someone finishing a FastAPI course in under a day while I struggled through React.

That comparison hurt.

But React demands a new way of thinking:

JavaScript is weirder than Python

frontend is messier

state management changes how you reason

And Tic-Tac-Toe?
It’s deceptively complex.

Finishing the Game

I finished it.

And more importantly:

I understand React better

I understand my limits better

I understand my growth better

A simple 3×3 grid taught me a lot.

Final Thoughts

React doesn’t carry you—you carry it.

And that’s what makes learning it valuable.

On to the next.


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

</description>
      <category>react</category>
      <category>javascript</category>
      <category>frontend</category>
      <category>learning</category>
    </item>
  </channel>
</rss>
