Altcademy - a Forbes magazine logo Best Coding Bootcamp 2023

How to pass information from child to child in ReactJS

## Understanding Components in ReactJS

In ReactJS, components are like the building blocks of your application. Picture them as the individual LEGO pieces that come together to create your final masterpiece. They are independent and reusable bits of code that serve as the heart of ReactJS.

## The Parent-Child Relationship in Components

To understand how to pass information from one child component to another, we first have to understand the parent-child relationship in ReactJS. In our LEGO analogy, think of a parent component as a LEGO baseplate and child components as the individual LEGO bricks. Each brick (child component) is placed on the baseplate (parent component).

```jsx
// ParentComponent.js
import React from 'react';
import ChildComponent from './ChildComponent';

class ParentComponent extends React.Component {
  render() {
    return (
      <div>
        <ChildComponent/>
      </div>
    );
  }
}

The above code represents a simple parent component with one child component. The child component is imported and then added to the parent component.

Passing Props From Parent to Child

In ReactJS, the standard way to pass information from parent to child is through props. Think of props as a bag of goodies a parent gives to their child. The parent can place any item (information) they want into the bag and then hand it over to the child.

// ParentComponent.js
import React from 'react';
import ChildComponent from './ChildComponent';

class ParentComponent extends React.Component {
  render() {
    return (
      <div>
        <ChildComponent childProp="Hello, Child!" />
      </div>
    );
  }
}

// ChildComponent.js
import React from 'react';

class ChildComponent extends React.Component {
  render() {
    return (
      <div>
        {this.props.childProp}
      </div>
    );
  }
}

In the above code, the parent component is passing a prop called childProp to the child component. The child component can then access this prop via this.props.childProp.

The Challenge: Passing Information from Child to Child

Passing information from one child component to another is a bit tricky because ReactJS is designed to pass information from parent to child, not from sibling to sibling or child to child. But, don't worry! There is a way to achieve this.

Lifting State Up

One common solution is to "lift the state up." This means you store the state in the parent component instead of in the child. You can think of the parent component as a family's shared home where all the children can access the shared resources.

Let's say we have two child components: ChildComponentA and ChildComponentB. We want to share information from ChildComponentA to ChildComponentB.

// ParentComponent.js
import React from 'react';
import ChildComponentA from './ChildComponentA';
import ChildComponentB from './ChildComponentB';

class ParentComponent extends React.Component {
  constructor() {
    super();
    this.state = { sharedData: '' };
  }

  handleData = (data) => {
    this.setState({ sharedData: data });
  }

  render() {
    return (
      <div>
        <ChildComponentA handleData={this.handleData} />
        <ChildComponentB sharedData={this.state.sharedData} />
      </div>
    );
  }
}

In this code, the parent component holds the state sharedData and passes a handleData function to ChildComponentA. When ChildComponentA wants to share information, it calls handleData, which updates the state in the parent. The updated state is then passed as a prop to ChildComponentB.

// ChildComponentA.js
import React from 'react';

class ChildComponentA extends React.Component {
  sendData = () => {
    this.props.handleData("Sharing data from Child A");
  }

  render() {
    return (
      <div>
        <button onClick={this.sendData}>Share Data</button>
      </div>
    );
  }
}

// ChildComponentB.js
import React from 'react';

class ChildComponentB extends React.Component {
  render() {
    return (
      <div>
        {this.props.sharedData}
      </div>
    );
  }
}

In ChildComponentA, we have a button that calls this.sendData when clicked. this.sendData then calls this.props.handleData which updates the state in the parent component. ChildComponentB receives this updated state as a prop and displays it.

Conclusion

Now you have a good understanding of how to pass information from child to child in ReactJS. Remember, it's all about lifting the state up and letting the parent component act as the intermediary. It's like a game of telephone! One child whispers something to the parent, who then passes the message along to the other child. With this understanding, you are now one step closer to becoming a ReactJS maestro! Keep building, keep learning, and most importantly, keep sharing those props! ```