Tag: react cheatsheet

  • React Cheat Sheet: Functional Components Edition

    React Cheat Sheet: Functional Components Edition

    React has evolved significantly since its inception, and with the rise of Hooks, functional components have become the go-to approach for building React applications. This cheat sheet provides an overview of the key concepts, features, and best practices for using functional components in React.

    1. Functional Components Basics

    A functional component is a plain JavaScript function that returns a React element.

    const MyComponent = () => { return
    Hello, World!
    ; };

    2. Using JSX

    JSX is a syntax extension that allows you to write HTML-like code within your JavaScript.

    const MyComponent = () => { return (

    Welcome to React

    ); };

    3. Props

    Props are used to pass data from a parent component to a child component.

    const Greeting = ({ name }) => { return

    Hello, {name}!

    ; }; // Usage

    4. Default Props

    You can define default props for a component.

    const Greeting = ({ name = "Guest" }) => {
      return <h1>Hello, {name}!</h1>;
    };
    

    5. State with useState

    The useState Hook allows you to add state to functional components.

    import { useState } from 'react';
    
    const Counter = () => {
      const [count, setCount] = useState(0);
    
      return (
        <div>
          <p>Count: {count}</p>
          <button onClick={() => setCount(count + 1)}>Increment</button>
        </div>
      );
    };
    

    6. Effect Hook: useEffect

    The useEffect Hook lets you perform side effects in functional components.

    import { useEffect } from 'react';
    
    const DataFetcher = () => {
      useEffect(() => {
        fetch('/api/data')
          .then(response => response.json())
          .then(data => console.log(data));
      }, []); // Empty dependency array means it runs once
    
      return <div>Data fetched. Check console.</div>;
    };
    

    7. Conditional Rendering

    Render different UI elements based on certain conditions.

    const LoginMessage = ({ isLoggedIn }) => {
      return (
        <div>
          {isLoggedIn ? <h1>Welcome back!</h1> : <h1>Please log in.</h1>}
        </div>
      );
    };
    

    8. Lists and Keys

    Render lists of data and use keys to help React identify which items have changed.

    const ItemList = ({ items }) => {
      return (
        <ul>
          {items.map(item => (
            <li key={item.id}>{item.name}</li>
          ))}
        </ul>
      );
    };
    

    9. Event Handling

    Handle events in functional components.

    const Button = () => {
      const handleClick = () => {
        alert('Button clicked!');
      };
    
      return <button onClick={handleClick}>Click Me</button>;
    };
    

    10. Forms and Controlled Components

    Handle form input with controlled components.

    const Form = () => {
      const [value, setValue] = useState('');
    
      const handleChange = (e) => {
        setValue(e.target.value);
      };
    
      const handleSubmit = (e) => {
        e.preventDefault();
        alert(`Submitted value: ${value}`);
      };
    
      return (
        <form onSubmit={handleSubmit}>
          <input type="text" value={value} onChange={handleChange} />
          <button type="submit">Submit</button>
        </form>
      );
    };
    

    11. Context API

    Use the Context API for state management across the component tree.

    import { createContext, useContext } from 'react';
    
    const MyContext = createContext();
    
    const MyProvider = ({ children }) => {
      const value = 'Hello from context';
    
      return (
        <MyContext.Provider value={value}>
          {children}
        </MyContext.Provider>
      );
    };
    
    const MyComponent = () => {
      const contextValue = useContext(MyContext);
    
      return <div>{contextValue}</div>;
    };
    

    12. Custom Hooks

    Create reusable logic with custom hooks.

    import { useState, useEffect } from 'react';
    
    const useFetch = (url) => {
      const [data, setData] = useState(null);
    
      useEffect(() => {
        fetch(url)
          .then(response => response.json())
          .then(data => setData(data));
      }, [url]);
    
      return data;
    };
    
    // Usage
    const DataComponent = () => {
      const data = useFetch('/api/data');
    
      return <div>{data ? JSON.stringify(data) : 'Loading...'}</div>;
    };
    

    13. Memoization with useMemo

    Optimize performance by memoizing expensive calculations.

    import { useMemo } from 'react';
    
    const ExpensiveComponent = ({ number }) => {
      const expensiveCalculation = useMemo(() => {
        // Assume this is a computationally expensive operation
        return number * 2;
      }, [number]);
    
      return <div>{expensiveCalculation}</div>;
    };
    

    14. useCallback

    Use useCallback to memoize functions to prevent unnecessary re-renders.

    import { useCallback } from 'react';
    
    const Button = ({ onClick }) => {
      return <button onClick={onClick}>Click me</button>;
    };
    
    const ParentComponent = () => {
      const handleClick = useCallback(() => {
        console.log('Button clicked');
      }, []);
    
      return <Button onClick={handleClick} />;
    };
    

    15. useReducer

    Manage complex state logic with the useReducer Hook.

    import { useReducer } from 'react';
    
    const reducer = (state, action) => {
      switch (action.type) {
        case 'increment':
          return { count: state.count + 1 };
        case 'decrement':
          return { count: state.count - 1 };
        default:
          throw new Error();
      }
    };
    
    const Counter = () => {
      const [state, dispatch] = useReducer(reducer, { count: 0 });
    
      return (
        <div>
          <p>Count: {state.count}</p>
          <button onClick={() => dispatch({ type: 'increment' })}>Increment</button>
          <button onClick={() => dispatch({ type: 'decrement' })}>Decrement</button>
        </div>
      );
    };
    

    16. Fragments

    Use fragments to group multiple elements without adding extra nodes to the DOM.

    const MyComponent = () => {
      return (
        <>
          <h1>Title</h1>
          <p>Description</p>
        </>
      );
    };
    

    17. Portals

    Render children into a DOM node outside the parent component’s DOM hierarchy.

    import { createPortal } from 'react-dom';
    
    const Modal = ({ children }) => {
      return createPortal(
        <div className="modal">
          {children}
        </div>,
        document.getElementById('modal-root')
      );
    };
    

    18. Error Boundaries with Error Boundary Component

    Use class components for error boundaries.

    import { Component } from 'react';
    
    class ErrorBoundary extends Component {
      constructor(props) {
        super(props);
        this.state = { hasError: false };
      }
    
      static getDerivedStateFromError(error) {
        return { hasError: true };
      }
    
      componentDidCatch(error, errorInfo) {
        console.log(error, errorInfo);
      }
    
      render() {
        if (this.state.hasError) {
          return <h1>Something went wrong.</h1>;
        }
    
        return this.props.children;
      }
    }
    
    // Usage
    <ErrorBoundary>
      <MyComponent />
    </ErrorBoundary>
    

    19. Lazy Loading with React.lazy and Suspense

    Dynamically import components to reduce the initial load time.

    import { lazy, Suspense } from 'react';
    
    const LazyComponent = lazy(() => import('./LazyComponent'));
    
    const App = () => {
      return (
        <Suspense fallback={<div>Loading...</div>}>
          <LazyComponent />
        </Suspense>
      );
    };
    

    20. PropTypes for Type Checking

    Use prop-types to document and enforce component prop types.

    import PropTypes from 'prop-types';
    
    const Greeting = ({ name }) => {
      return <h1>Hello, {name}!</h1>;
    };
    
    Greeting.propTypes = {
      name: PropTypes.string.isRequired,
    };
    

    Functional components offer a clean and straightforward way to build React applications, especially with the powerful capabilities introduced by Hooks. This cheat sheet provides a quick reference to essential concepts, helping you write effective and efficient React code.