JS-201-ReactFundamentals
  • Part 0: App Overview
  • Part 1: Intro to React
    • 1.0: Packages Setup
    • 1.1: Project Setup
    • 1.2: React Router Dom
  • Part 2: JavaScript Concepts
    • 2.0: ES6 Overview
    • 2.1: classes
    • 2.2: constructors
    • 2.3: extends
    • 2.4: super
    • 2.5: interpolation
    • 2.6: map
    • 2.7: filter
  • Part 3: Functional Components
    • 3.0: Functional Components Overview
    • 3.1: Calling Functional Components
    • 3.2: Single Element Rule
    • 3.3: Arrow Functions
    • 3.4: Challenge
    • 3.4: Solution
    • 3.5: Challenge 2
    • 3.5: Solution 2
  • Part 4: JSX Challenge
    • 4.1: JSX Overview
    • 4.1: Challenge Answer
    • 4.2: className
  • Part 5: Class Concepts
    • 5.1: State
    • 5.2: setState
    • 5.3: Class Components Challenge
    • 5.4: Class Components Challenge Answer
  • Part 6: Props Starter
    • 6.0: Props Overview
    • 6.1: Props Demo and Challenge 1
    • 6.2: Props Answer 2
    • 6.3: Props Passing Functions and Challenge 2
    • 6.4: Props Answer 2
    • 6.5: External Props and Mapping Components
    • 6.6: PropTypes
  • Part 7: Lifecycle Methods
    • 7.0: Lifecycle Overview
    • 7.1: Lifecycle Methods
    • 7.2: Mounting Methods
    • 7.3: Update Methods
    • 7.4: Unmount Methods
  • Part 8: Apps
    • 1.0 - Small Timer Apps
      • 1.1 - Simple Timer
      • 1.2 - Clock App
      • 1.3 - Stop Watch App
      • 1.4 - Challenge
    • 2.0 - Concept List
      • 2.1 - Concept Data
      • 2.2 - Concept App Component
      • 2.3 - Concept Component
      • 2.4 - Concept List Component
    • 3.0 - NYT
      • 3.1 - NytApp Component
      • 3.2 - Nyt Results
    • 4.0 - The Friend List App
      • 4.1 - Friend List App Component
      • 4.2 - Friend Component
    • 5.0 - Movie Search Application
      • 5.1 - Form Component
      • 5.2 - Form Results Component
      • 5.3 - Styled Components
    • 6.0 - YouTube Api
      • 6.1 - Video Component
      • 6.2 - Video Component
      • 6.3 - Video Component
    • 7.0 - Github Api Application
      • 7.1 - The Users
      • 7.2 - Github API Component
      • 7.3 - Github API Card
      • 7.4 - Github API Card Form
      • 7.5 - Github API Card List
      • 7.6 - Github API Search
      • 7.7 - Github API Challenge
    • 8.0 - Bitcoin Api Application
      • 8.1 - Bitcoin API Setup
      • 8.2 - Bitcoin API Fetch
      • 8.3 - Bitcoin API Line Chart
      • 8.4 - Bitcoin API Fetching Data
      • 8.5 - Bitcoin API Info Box
      • 8.6 - Bitcoin API Completed Code
    • 9.0 - Google Maps Api Challenge
    • 10.0 - Sound Cloud App Challenge
    • 11.0 - VR App Challenge
    • 12.0 - React Native Intro
  • Part 9: Project
  • Part 10: Notes
    • 10.1 - Resources
    • 10.2 - Troubleshooting
Powered by GitBook
On this page
  • Making it work
  • Challenge
  1. Part 3: Functional Components

3.2: Single Element Rule

One of the first rules you need to know about any Component, whether it be functional or class, is that all JSX (the HTML looking stuff that we'll discuss later) must be wrapped inside a single parent element, a <div>, an <h1>, or inside of any other element with a closing tag.

Notice that you have done this in your FunctionalComponentDemo, where the 'Hello React' text is wrapped in the opening and closing <div> tags:

   return (
        <div className="main">
            <div className="mainDiv">
                Hello React
            </div>
        </div>
    );

Compare that 'return' code to the following:

import React from 'react';

const FunctionalComponentDemo = function () {
    return (
            <div>
                Hello React
            </div>
            <div>
                How are you today?
            </div>
    );
};

export default FunctionalComponentDemo;

What's different here?

Well, the second example will show an error, saying that 'JSX elements must have one parent'. This is because both of the <div> tags are on the same level in the DOM tree. Again, there has to be a single parent in the return.

Making it work

If we did want to use the code in the second example, that is, two different <div> tags in the same component, we would have to structure it like this:

import React from 'react';

const FunctionalComponentDemo = function () {
    return (
        <div className="main">
            <div className="mainDiv">
                <div>
                    Hello React
                </div>
                <div>
                    How are you today?
                </div>
            </div>
        </div>
    );
};

export default FunctionalComponentDemo;

Go ahead and run the app with that code. You should see it run correctly now.

Challenge

Before moving on, see if you can write the above component with Arrow Function syntax. It's very common to see that syntax in React components. If you've never seen Arrow Functions (also called Fat Arrow), try to research for a few minutes. Take 15 minutes to see if you can do this - without peeking at the answer in the next module.

Previous3.1: Calling Functional ComponentsNext3.3: Arrow Functions

Last updated 7 years ago

You can find information about Arrow Functions in the documentation.

MDN