DEV Community

Cover image for React Information Flow
Faith Kimani
Faith Kimani

Posted on

1 1

React Information Flow

Information Flow in React

Ever wondered how information flows in a React app? How do we pass data between siblings or from parent to child? What if I want to update state in the parent component due to an event in a child?

Understanding Information Flow

In React, data flows uni-directionally—from parent to child. This means that components pass data down via props. However, if a child component needs to modify the parent's state, it does so using a callback function passed as a prop.

Sibling components cannot communicate directly. Instead, data should be lifted to the nearest common parent, which then passes it down as props. This technique is called lifting state up.

_fig1_: Illustrates Information flow in React
fig1: Illustrates Information flow in React

Key Principles:

  • Props: Used to pass data down from parent to child.
  • Callbacks: Used to pass data up from child to parent.
  • State Lifting: When siblings need to share data, state should be stored in their closest common parent.
  • State Management: For larger applications, tools like Redux or React Context can help manage state globally.

Example 1: Passing Data from Parent to Child

function Parent() {
  const [message, setMessage] = React.useState("Hello from Parent!");

  return <Child message={message} />;
}

function Child({ message }) {
  return <p>{message}</p>;
}
Enter fullscreen mode Exit fullscreen mode

Here, the Parent component holds a state variable message, which is passed down to the Child component via props.

Example 2: Passing Data from Child to Parent (Callback Functions)

function Parent() {
  const [color, setColor] = React.useState("blue");

  function changeColor() {
    setColor(color === "blue" ? "red" : "blue");
  }

  return <Child onChangeColor={changeColor} />;
}

function Child({ onChangeColor }) {
  return <button onClick={onChangeColor}>Change Parent Color</button>;
}
Enter fullscreen mode Exit fullscreen mode

Here, the onChangeColor function is passed down from Parent to Child as a prop. When the child button is clicked, the function is invoked, updating the parent’s state.

Example 3: Synchronizing State Between Siblings

Since siblings cannot directly share state, we lift the state up to their common parent.

function Parent() {
  const [childColor, setChildColor] = React.useState("white");

  function handleColorChange() {
    const newColor = childColor === "white" ? "yellow" : "white";
    setChildColor(newColor);
  }

  return (
    <div>
      <Child color={childColor} onChangeColor={handleColorChange} />
      <Child color={childColor} onChangeColor={handleColorChange} />
    </div>
  );
}

function Child({ color, onChangeColor }) {
  return <div onClick={onChangeColor} style={{ backgroundColor: color, padding: '20px', margin: '5px' }}>Click Me</div>;
}
Enter fullscreen mode Exit fullscreen mode

Here, clicking on any Child updates the state in Parent, which in turn updates both Child components.

Conclusion

  • Data flows down via props.
  • Data flows up via callback functions.
  • Sibling components share data through lifting state up.
  • For complex state management, consider React Context or Redux.

By following these principles, we can build efficient and scalable React applications with clear and predictable data flow.

Resources:
Lifting State Up.

Sentry image

Hands-on debugging session: instrument, monitor, and fix

Join Lazar for a hands-on session where you’ll build it, break it, debug it, and fix it. You’ll set up Sentry, track errors, use Session Replay and Tracing, and leverage some good ol’ AI to find and fix issues fast.

RSVP here →

Top comments (0)

A Workflow Copilot. Tailored to You.

Pieces.app image

Our desktop app, with its intelligent copilot, streamlines coding by generating snippets, extracting code from screenshots, and accelerating problem-solving.

Read the docs

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay