DEV Community

Cover image for useState Explained Simply - A Guide for Non-Developers (2025)
Javier Ductor Peters
Javier Ductor Peters

Posted on • Originally published at thespaghetti.dev

useState Explained Simply - A Guide for Non-Developers (2025)

Hey πŸ‘‹

Coming from a marketing background, I remember how intimidating React hooks felt at first. All those technical terms and developer jargon made my head spin! After lots of learning (and plenty of confusion), I wanted to create the guide I wish I had when starting out.

If you've ever:

  • Felt lost in the React documentation πŸ˜΅β€πŸ’«
  • Wondered why we can't just use regular variables
  • Struggled to explain useState to others
  • Wanted examples that actually make sense

Then this guide is for you! Let's break useState down into bite-sized, digestible pieces.

What Are React Hooks? 🎣

Think of Hooks like a Swiss Army knife - each tool has a specific purpose:

  • useState: Your magical notepad (we'll dive deep into this one!)
  • useEffect: Your personal assistant who watches for changes
  • useContext: The group chat where everyone shares information
  • useReducer: Like useState's big brother for complicated stuff
  • useMemo: Your smart friend who remembers solutions
  • useCallback: Similar to useMemo, but for remembering functions
  • useRef: Like putting a sticky note on something to find it later

What is useState? πŸ“

Remember those magic boards where you could write something, erase it, and write something new? useState is exactly like that for your website! It helps your website remember things and update them when needed.

const [something, setSomething] = useState(startingValue);
Enter fullscreen mode Exit fullscreen mode

Think of it as:

  • something: What's currently written on your board
  • setSomething: Your special eraser/marker to change what's written
  • startingValue: What you write on the board to begin with

How Does useState Work? πŸ”„

Let me explain this like a cooking recipe:

1. Getting Ready to Cook (Initialization)

  • Set up your cooking space (your component)
  • Create a special recipe card (React's state space)
  • Each ingredient gets its own spot on the card

2. Changing the Recipe (Updates)

When you want to change an ingredient amount:

  • React writes the change on a sticky note
  • Puts that note in a "to-do" pile
  • Plans to update the recipe soon
  • Groups multiple changes together (like changing several ingredients at once)

3. Making the Changes (Render)

  • React reviews all sticky notes
  • Calculates new amounts
  • Updates the recipe card
  • Shows everyone the new recipe

4. Finishing Up (Commit)

  • React makes the changes
  • Cleans up old ingredients
  • Sets up new ingredients

Real-World Examples πŸ’‘

1. A Simple Welcome Message

function WelcomeMessage() {
  // Think of this like a greeting card where you can change the name
  const [name, setName] = useState("Guest")

  return (
    <div>
      <input 
        value={name}
        onChange={(e) => setName(e.target.value)}
        placeholder="Type your name"
      />
      <p>Welcome to my website, {name}! πŸŽ‰</p>
    </div>
  )
}
Enter fullscreen mode Exit fullscreen mode

2. A Like Button Counter

function LikeButton() {
  // Just like counting likes on Instagram
  const [likes, setLikes] = useState(0)

  return (
    <div>
      <p>This post has {likes} likes</p>
      <button onClick={() => setLikes(likes + 1)}>β™₯️ Like</button>
    </div>
  )
}
Enter fullscreen mode Exit fullscreen mode

3. Dark Mode Toggle

function DarkModeSwitch() {
  // Like a light switch for your website
  const [isDark, setIsDark] = useState(false)

  return (
    <div style={{
      background: isDark ? 'black' : 'white',
      color: isDark ? 'white' : 'black'
    }}>
      <button onClick={() => setIsDark(!isDark)}>
        Switch to {isDark ? 'β˜€οΈ Light' : 'πŸŒ™ Dark'} Mode
      </button>
    </div>
  )
}
Enter fullscreen mode Exit fullscreen mode

Common Mistakes (We All Make Them!) 🚫

1. Trying to Change Things Directly

// 🚫 Don't do this!
const [user, setUser] = useState({name: 'John'})
user.name = 'Jane'  // This is like trying to edit a photocopy

// βœ… Do this instead!
setUser({...user, name: 'Jane'})  // This is like making a new copy
Enter fullscreen mode Exit fullscreen mode

2. Updating Based on Previous Value

// 🚫 Don't do this!
setCount(count + 1)
setCount(count + 1)  // Oops, this won't work right!

// βœ… Do this instead!
setCount(prev => prev + 1)
setCount(prev => prev + 1)  // Much better!
Enter fullscreen mode Exit fullscreen mode

When Should You Use useState? βœ…

Use it when you need to:

  • Keep track of form inputs
  • Toggle things on/off
  • Count things
  • Store temporary information
  • Handle user interactions

When Should You Not Use useState? β›”

Avoid it when:

  • You need to share data between many components (use Context)
  • You have complex state logic (use useReducer)
  • You're dealing with large amounts of data
  • You need to update multiple related things at once

Let's Practice! πŸ’ͺ

Here's a small challenge to test your understanding:

  1. Create a simple counter component
  2. Add increment and decrement buttons
  3. Add a reset button
  4. Bonus: Add a "multiply by 2" button

Drop your solution in the comments! I'd love to see what you create.

Wrapping Up 🎁

useState might seem scary at first, but it's really just a way to help your website remember things - like a digital sticky note system! Remember:

  • Start simple
  • Practice with basic examples
  • Don't worry about being perfect
  • Keep building and learning

Coming from a non-technical background myself, I know these concepts take time to sink in. That's totally normal!

Let's Connect! 🀝

I'd love to hear about your React journey:

  • What was your "aha!" moment with useState?
  • What analogies helped you understand it?
  • What other React concepts would you like me to break down?

Share your thoughts in the comments below!

Stay tuned for more guides where I break down other React concepts into normal human language!

Happy coding! πŸš€


Cover image credits: Your Image Credit Here

Top comments (0)