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