Components can be either functional components (using functions) or class components (using ES6 classes). Functional components are simpler and recommended for most use cases, while class components have additional features like state and lifecycle methods.
Class and Function components
Controlled and Uncontrolled components
Pure components
Smart and Dumb components
Stateless and Stateful components