DEV Community

Mohammed Taukir Sheikh
Mohammed Taukir Sheikh

Posted on

Understanding Children Props in React

If you've been working with React, you may have heard the term "children props" thrown around. But what exactly are children props, and how do they work?

In short, children props are a way to pass components or elements as children to another component. This allows you to create more flexible and reusable components in your application.

To understand how children props work, let's consider a real-world example. Imagine you have a parent component called Card, which displays a box with some content inside. The Card component has a few props, such as title, subtitle, and body, which allow you to customize the content displayed inside the box.

Now, let's say you want to add a button to the Card component, but you want to allow the user to customize the button's text and functionality. This is where children props come in.

Instead of adding a button prop to the Card component, you can pass the button element as a child component to the Card component. Here's how you can do it:

function Card({ title, subtitle, body, children }) {
  return (
    <div className="card">
      <h1>{title}</h1>
      <h2>{subtitle}</h2>
      <p>{body}</p>
      {children}
    </div>
  );
}

function App() {
  return (
    <Card title="My Card" subtitle="Subtitle" body="This is the body">
      <button onClick={() => console.log('Button clicked!')}>
        Click me!
      </button>
    </Card>
  );
}
Enter fullscreen mode Exit fullscreen mode

In this example, I've added a children prop to the Card component, which allows us to pass any child component to the Card component. In this case, we're passing a button element with an onClick handler that logs a message to the console.

By using children props, we've created a more flexible and reusable Card component that can be customized with any child component. This makes our code more modular and easier to maintain.

Lets see some more examples

import React from "react";

function Greeting(props) {
  return <p>Hello, {props.children}!</p>;
}

function App() {
  return (
    <div className="App">
      <Greeting>world</Greeting>
    </div>
  );
}

export default App;
Enter fullscreen mode Exit fullscreen mode

In this example, we have a "Greeting" component that takes in a "children" prop. The "children" prop is used to pass in the name of the person being greeted.

In the "Greeting" function, we render a pelement that says "Hello, " followed by the "children" passed in as props, followed by an exclamation point.

In the "App" function, we render the "Greeting" component and pass in the string "world" as children. This results in the message "Hello, world!" being rendered on the screen.

This is a simple example, but it shows how the children prop
can be used to pass content to a component and render it within the component. The possibilities for what can be passed in as children are endless, allowing for great flexibility in creating reusable components.

import React from "react";

function Card(props) {
  return (
    <div className="card">
      <div className="card-header">{props.title}</div>
      <div className="card-body">{props.children}</div>
    </div>
  );
}

function App() {
  return (
    <div className="App">
      <Card title="My Card">
        <p>This is the content of my card.</p>
        <p>It can contain any type of content, including images, lists, and more.</p>
      </Card>
    </div>
  );
}

export default App;
Enter fullscreen mode Exit fullscreen mode

In this example, we have a "Card" component that takes in a "title" prop and a "children" prop. The "title" prop is used to specify the title of the card, and the "children" prop is used to pass in the content of the card.

Lets see one more example

import React from "react";

function List(props) {
  return (
    <ul className="list">
      {props.children.map((child) => (
        <li key={child.props.id}>{child}</li>
      ))}
    </ul>
  );
}

function ListItem(props) {
  return <span id={props.id}>{props.text}</span>;
}

function App() {
  return (
    <div className="App">
      <List>
        <ListItem id="1" text="Item 1" />
        <ListItem id="2" text="Item 2" />
        <ListItem id="3" text="Item 3" />
      </List>
    </div>
  );
}

export default App;
Enter fullscreen mode Exit fullscreen mode

In this example, we have a "List" component that takes in a "children" prop. The "children" prop is an array of "ListItem" components, each with its own ID and text.

In the "List" function, we render an unordered list and map over the "children" prop to render each "ListItem"component as a list item within the list.

In the "ListItem" function, we render a span element with the ID and text passed in as props.

In the "App" function, we render the "List" component and pass in an array of "ListItem" components as children. Each "ListItem"has its own ID and text, which are rendered within the "List" using the "children" prop.

This allows us to easily create lists of items in our app and customize the content of each item using the "children" prop. We can pass in any number of "ListItem" components as children, each with its own content and styling.

Top comments (0)