Understanding and Managing State in React.js: A Beginner’s Guide

Dive into the core of React.js with our comprehensive guide on state management. Learn how to dynamically interact with users and keep your UI up-to-date with useState and useEffect hooks.
Understanding and Managing State in React.js
Table of Contents
Weekly newsletter

No spam. Get the latest trends, tips, and insights in website design and digital marketing delivered to your inbox.

Welcome back to our tutorial series on React.js! After getting our hands dirty with a simple Single-Page Application (SPA), it’s time to delve into one of React’s core concepts: the state.

This guide will introduce you to state in React, how to manage it, and why it’s crucial for building efficient, interactive web applications.

What is State?

In React, state refers to a JavaScript object that stores a component’s dynamic data. It enables a component to keep track of changes between renders and update the UI to reflect these changes. In simpler words, the state is what allows your application to behave interactively and ‘react’ to user inputs.

Introducing the useState Hook

In functional components, React offers a Hook called useState that lets us add state to our components. Here’s a simple counter application that demonstrates its use:

import React, { useState } from 'react';

function Counter() {
  const [count, setCount] = useState(0);

  return (
      <p>You clicked {count} times</p>
      <button onClick={() => setCount(count + 1)}>
        Click me

export default Counter;

In this example, useState is a function that accepts the initial state as an argument. It returns an array containing two elements: the current state and a function to update it (setCount in this case).

Synchronous vs. Asynchronous Updates

Understanding the asynchronous nature of state updates in React is crucial. When you call setCount, it doesn’t immediately update the state but schedules the update. This fact becomes especially important when you need to update the state based on the previous state.

Here’s how you can do this in a way that ensures accuracy even with asynchronous updates:

setCount(prevCount => prevCount + 1);

The useEffect Hook

React’s useEffect hook enables us to perform side effects in function components, such as data fetching, setting up a subscription, or manually changing the DOM. It serves the same purpose as componentDidMount, componentDidUpdate, and componentWillUnmount combined in class components.

Here’s an example:

import React, { useState, useEffect } from 'react';

function Example() {
  const [count, setCount] = useState(0);

  useEffect(() => {
    document.title = `You clicked ${count} times`;

  return (
      <p>You clicked {count} times</p>
      <button onClick={() => setCount(count + 1)}>
        Click me

export default Example;

In this example, the useEffect hook runs after every render. So, when you click the button, it increments the state, triggers a re-render, and then the effect runs, updating the document title.

Managing Complex State

In more complex applications, you might need to manage multiple related states. One approach is to use multiple useState hooks:

const [firstName, setFirstName] = useState('');
const [lastName, setLastName] = useState('');
const [email, setEmail] = useState('');

Alternatively, you can group related state variables into a single state object:

const [form, setForm] = useState({
  firstName: '',
  lastName: '',
  email: ''

With this approach, you need to be careful to merge the old state when updating:

setForm(prevForm => ({
  firstName: 'New first name'

This code uses the spread operator (...) to include all properties of the old state in the new state and then overwrites firstName.

Read other related articles:


Managing state is a pivotal aspect of building React applications. It facilitates dynamic interaction with users and displays up-to-date data. Practice makes perfect, so create your own components with state and get a feel for how it works!

In our next post, we’ll delve deeper into the concept of “props” in React, which will further refine your understanding of data flow in React applications.

And remember, if you need any professional help with web development, consider reaching out to GetSmartWebsite. Our custom web design and development services are always here to help bring your vision to life.

Happy coding!

One Response

  1. I thoroughly enjoyed reading your blog post as it provided me with valuable insights and information. Additionally, I would like to contribute some supplementary points that could benefit your readers:
    – MobX State Management
    – Recoil for React
    – Zustand State Library
    – Redux Observable for RxJS
    – Redux Reselect for Selectors
    – GraphQL State Management with Apollo Client
    – Redux-Persist for State Persistence
    – Server-Side Rendering (SSR) and State Hydration
    – Sharing State between Components
    – Handling Asynchronous State Changes
    – Managing UI State and Business Logic Separately
    These points offer additional perspectives on the discussed topic. On a personal note, as someone without a technical background, I understand the challenges of website development. If you are facing similar difficulties, I have found it helpful to seek assistance from professional companies that specialize in web development and website design and redesign, such as Alakmalak Technologies

Join the Conversation

Your email address will not be published. Required fields are marked *

Subscribe to our newsletter

No spam. Get the latest trends, tips, and insights in website design and digital marketing delivered to your inbox.