AI Workshop: learn to build apps with AI →
State Management: Data flow

Join the AI Workshop and learn to build real-world apps with AI. A hands-on, practical program to level up your skills.


In a React application, data flows from a parent component to a child component, using props as we saw in the previous section:

<WelcomeMessage name={'Flavio'} />

If you pass a function to the child component, you can also change a state variable defined in the parent component from a child component:

<Counter setCount={setCount} count={count} />

This is helpful when the parent component is “in charge” of the state variable.

Inside the Counter component, we can now call the setCount prop and call it to update the count state in the parent component when something happens:

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

Here’s a full example:

import { useState } from 'react'

const Counter = ({ count, setCount }) => {
  return (
    <div>
      <button onClick={() => setCount(count + 1)}>Click me</button>
    </div>
  )
}

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

  return (
    <div>
      <p>You clicked {count} times</p>
      <Counter setCount={setCount} count={count} />
    </div>
  )
}

export default App

You need to know that there are more advanced ways to manage data.

Starting from the Context API, but also libraries like Jotai and Easy Peasy.

But often, using those 2 ways I just explained is the perfect, simple solution you need.

Lessons in this unit:

0: Introduction
1: Managing state
2: Component props
3: ▶︎ Data flow
4: The React Context API
5: React Concept: Immutability
6: Props vs State in React
7: Unidirectional Data Flow in React
8: Learn how to use Redux
9: The easy-peasy React state management library