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
  1. Part 6: Props Starter

6.4: Props Answer 2

The below code represents one possible solution for the challenge. You may want to put these 3 methods between your constructor and render in your class component.

backgroundColorToggle = () => {
    this.setState({
        backgroundColor: this.state.backgroundColor === 'blue' ? 'green' : 'blue'
    })  
}

borderRadiusToggle = () => {
    this.setState({
        borderRadius: this.state.borderRadius === '5px' ? '25px' : '5px'
    })  
}

borderStyleToggle = () => {
    this.setState({
        borderStyle: this.state.borderStyle === 'dashed' ? 'solid' : 'dashed'
    })  
}

In addition to the methods built out above, you'll want to modify your function props in each of the FunctionalComp calls. I've also changed the values of the string props to make sure it's clear to the user what each button will do. Here is a sample solution:

    <FunctionalComp string="Color Toggle" function={this.colorToggle}/>
    <FunctionalComp string="Background Color Toggle" function={this.backgroundColorToggle}/>
    <FunctionalComp string="Border Radius Toggle" function={this.borderRadiusToggle}/>
    <FunctionalComp string="Border Style Toggle" function={this.borderStyleToggle}/>

When this is set up, you should be able to toggle each button and see a change in the DOM. Below is a screen capture of what your DOM can look like when you've clicked every button once:

Take a second to evaluate what your code is doing. This is pretty cool--first, you're delegating DOM display out of the parent class component into the functional component 'below' it. You're also using methods built in that same parent component and sharing them with the child. The child triggers that function, which still changes properties of the class parent component (state, in this case). React is filled with these instances of parent-child communication. It's both a strength and a limitation of working with this environment!

Previous6.3: Props Passing Functions and Challenge 2Next6.5: External Props and Mapping Components

Last updated 6 years ago

Challenge #2 Answer