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)
							 |