69 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			69 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| ---
 | |
| title: Functional Components vs Class Components
 | |
| ---
 | |
| 
 | |
| ## Functional Components vs Class Components
 | |
| 
 | |
| There are mainly two components in React:
 | |
| * Functional Components 
 | |
| * Class Components
 | |
| 
 | |
| ## Functional Components
 | |
| 
 | |
| * Functional components are basic JavaScript functions. These are typically arrow functions but can also be created with the regular `function` keyword.
 | |
| * Sometimes referred to as "dumb" or "stateless" components as they simply accept data and display them in some form; that is they are mainly responsible for rendering UI.
 | |
| * React lifecycle methods (for example, `componentDidMount`) cannot be used in functional components.
 | |
| * There is no render method used in functional components.
 | |
| * These are mainly responsible for UI and are typically presentational only (For example, a Button component).
 | |
| * Functional components can accept and use props.
 | |
| * Functional components should be favored if you do not need to make use of React state.
 | |
| 
 | |
| ```js
 | |
| import React from "react";
 | |
| 
 | |
| const Person = props => (
 | |
|   <div>
 | |
|     <h1>Hello, {props.name}</h1>
 | |
|   </div>
 | |
| );
 | |
| 
 | |
| export default Person;
 | |
| ```
 | |
| 
 | |
| ## Class Components
 | |
| 
 | |
| * Class components make use of ES6 class and extend the `Component` class in React.
 | |
| * Sometimes called "smart" or "stateful" components as they tend to implement logic and state.
 | |
| * React lifecycle methods can be used inside class components (for example, `componentDidMount`).
 | |
| * You pass props down to class components and access them with `this.props`
 | |
| 
 | |
| ```js
 | |
| import React, { Component } from "react";
 | |
| 
 | |
| class Person extends Component {
 | |
|   constructor(props){
 | |
|     super(props);
 | |
|     this.state = {
 | |
|       myState: true;
 | |
|     }
 | |
|   }
 | |
|   
 | |
|   render() {
 | |
|     return (
 | |
|       <div>
 | |
|         <h1>Hello Person</h1>
 | |
|       </div>
 | |
|     );
 | |
|   }
 | |
| }
 | |
| 
 | |
| export default Person;
 | |
| ```
 | |
| 
 | |
| ## More Information
 | |
| 
 | |
| * [React Components](https://reactjs.org/docs/components-and-props.html)
 | |
| * [Functional vs class components](https://react.christmas/16)
 | |
| * [Stateful vs Stateless Functional Components in React](https://code.tutsplus.com/tutorials/stateful-vs-stateless-functional-components-in-react--cms-29541)
 | |
| * [State and LifeCycle](https://reactjs.org/docs/state-and-lifecycle.html)
 |