--- id: 5a24c314108439a4d4036164 title: Create a Component with Composition challengeType: 6 isRequired: false --- ## Description
Now we will look at how we can compose multiple React components together. Imagine you are building an App and have created three components, a Navbar, Dashboard, and Footer. To compose these components together, you could create an App parent component which renders each of these three components as children. To render a component as a child in a React component, you include the component name written as a custom HTML tag in the JSX. For example, in the render method you could write:
return (
<App>
  <Navbar />
  <Dashboard />
  <Footer />
</App>
)
When React encounters a custom HTML tag that references another component (a component name wrapped in < /> like in this example), it renders the markup for that component in the location of the tag. This should illustrate the parent/child relationship between the App component and the Navbar, Dashboard, and Footer.
## Instructions
In the code editor, there is a simple functional component called ChildComponent and a class component called ParentComponent. Compose the two together by rendering the ChildComponent within the ParentComponent. Make sure to close the ChildComponent tag with a forward slash. Note: ChildComponent is defined with an ES6 arrow function because this is a very common practice when using React. However, know that this is just a function. If you aren't familiar with the arrow function syntax, please refer to the JavaScript section.
## Tests
```yml tests: - text: The React component should return a single div element. testString: assert((function() { var shallowRender = Enzyme.shallow(React.createElement(ParentComponent)); return shallowRender.type() === 'div'; })(), 'The React component should return a single div element.'); - text: The component should return two nested elements. testString: assert((function() { var shallowRender = Enzyme.shallow(React.createElement(ParentComponent)); return shallowRender.children().length === 2; })(), 'The component should return two nested elements.'); - text: The component should return the ChildComponent as its second child. testString: assert((function() { const mockedComponent = Enzyme.mount(React.createElement(ParentComponent)); return mockedComponent.find('ParentComponent').find('ChildComponent').length === 1; })(), 'The component should return the ChildComponent as its second child.'); ```
## Challenge Seed
```jsx const ChildComponent = () => { return (

I am the child

); }; class ParentComponent extends React.Component { constructor(props) { super(props); } render() { return (

I am the parent

{ /* change code below this line */ } { /* change code above this line */ }
); } }; ```
### After Test
```js ReactDOM.render(, document.getElementById('root')) ```
## Solution
```js const ChildComponent = () => { return (

I am the child

); }; class ParentComponent extends React.Component { constructor(props) { super(props); } render() { return (

I am the parent

{ /* change code below this line */ } { /* change code above this line */ }
); } }; ```