React Components

Introduction to Components

Components are the building blocks of React applications. They let you split UI into independent, reusable pieces.

Function vs Class Components

Function components are plain JS functions that return JSX. Class components extend React.Component:

// Function component
function Welcome({ name }) {
  return <h2>Welcome, {name}!</h2>
}

// Class component
import React from 'react';
class WelcomeClass extends React.Component {
  render() {
    return <h2>Welcome, {this.props.name}!</h2>
  }
}
 

Props & Children

Props are inputs to components. The special children prop contains nested elements:

function Box({ title, children }) {
  return (
    <div className="box">
      <h3>{title}</h3>
      {children}
    </div>
  )
}

// Usage
<Box title="Note">
  <p>This is a child paragraph.</p>
</Box>
 

Lifecycle & Effects

Class components have lifecycle methods (componentDidMount, componentDidUpdate, componentWillUnmount). Function components use useEffect instead:

import { useEffect } from 'react';
function Timer() {
  useEffect(() => {
    const id = setInterval(() => console.log('tick'), 1000);
    return () => clearInterval(id);
  }, []); // empty deps = mount/unmount
  return <p>Timer running in console</p>;
}
 

Composition & Patterns

Compose components instead of inheritance. Common patterns:

  • Render Prop
  • Higher-Order Component (HOC)
  • Compound Components
// Render prop example
function DataLoader({ render }) {
  const data = fetchData();
  return render(data);
}

<DataLoader render={data => <div>{data}</div>} />