Lädt...


🔧 Intern level: Lifecycle Methods and Hooks in React


Nachrichtenbereich: 🔧 Programmierung
🔗 Quelle: dev.to

Introduction to React Hooks

React Hooks are functions that let you use state and other React features in functional components. Before hooks, stateful logic was only available in class components. Hooks provide a more direct API to the React concepts you already know, such as state, lifecycle methods, and context.

Key Hooks in React

useState

useState is a hook that lets you add state to functional components.

Example:

import React, { useState } from 'react';

const Counter = () => {
  const [count, setCount] = useState(0);

  return (
    <div>
      <p>You clicked {count} times</p>
      <button onClick={() => setCount(count + 1)}>Click me</button>
    </div>
  );
};

export default Counter;

In this example, useState initializes the count state variable to 0. The setCount function is used to update the state when the button is clicked.

useEffect

useEffect is a hook that lets you perform side effects in functional components, such as fetching data, directly interacting with the DOM, and setting up subscriptions. It combines the functionality of several lifecycle methods in class components (componentDidMount, componentDidUpdate, and componentWillUnmount).

Example:

import React, { useState, useEffect } from 'react';

const DataFetcher = () => {
  const [data, setData] = useState(null);

  useEffect(() => {
    fetch('https://api.example.com/data')
      .then(response => response.json())
      .then(data => setData(data));
  }, []);

  return (
    <div>
      {data ? <pre>{JSON.stringify(data, null, 2)}</pre> : 'Loading...'}
    </div>
  );
};

export default DataFetcher;

In this example, useEffect fetches data from an API when the component mounts.

useContext

useContext is a hook that lets you access the context value for a given context.

Example:

import React, { useContext } from 'react';

const ThemeContext = React.createContext('light');

const ThemedComponent = () => {
  const theme = useContext(ThemeContext);

  return <div>The current theme is {theme}</div>;
};

export default ThemedComponent;

In this example, useContext accesses the current value of ThemeContext.

useReducer

useReducer is a hook that lets you manage complex state logic in a functional component. It is an alternative to useState.

Example:

import React, { useReducer } from 'react';

const initialState = { count: 0 };

const reducer = (state, action) => {
  switch (action.type) {
    case 'increment':
      return { count: state.count + 1 };
    case 'decrement':
      return { count: state.count - 1 };
    default:
      return state;
  }
};

const Counter = () => {
  const [state, dispatch] = useReducer(reducer, initialState);

  return (
    <div>
      <p>Count: {state.count}</p>
      <button onClick={() => dispatch({ type: 'increment' })}>Increment</button>
      <button onClick={() => dispatch({ type: 'decrement' })}>Decrement</button>
    </div>
  );
};

export default Counter;

In this example, useReducer manages the count state with a reducer function.

Custom Hooks

Custom hooks let you reuse stateful logic across multiple components. A custom hook is a function that uses built-in hooks.

Example:

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;
};

const DataFetcher = ({ url }) => {
  const data = useFetch(url);

  return (
    <div>
      {data ? <pre>{JSON.stringify(data, null, 2)}</pre> : 'Loading...'}
    </div>
  );
};

export default DataFetcher;

In this example, useFetch is a custom hook that fetches data from a given URL.

Advanced Hook Patterns

Managing Complex State with useReducer

When dealing with complex state logic involving multiple sub-values or when the next state depends on the previous one, useReducer can be more appropriate than useState.

Example:

import React, { useReducer } from 'react';

const initialState = { count: 0 };

const reducer = (state, action) => {
  switch (action.type) {
    case 'increment':
      return { count: state.count + 1 };
    case 'decrement':
      return { count: state.count - 1 };
    default:
      return state;
  }
};

const Counter = () => {
  const [state, dispatch] = useReducer(reducer, initialState);

  return (
    <div>
      <p>Count: {state.count}</p>
      <button onClick={() => dispatch({ type: 'increment' })}>Increment</button>
      <button onClick={() => dispatch({ type: 'decrement' })}>Decrement</button>
    </div>
  );
};

export default Counter;

In this example, useReducer manages the count state with a reducer function.

Optimizing Performance with useMemo and useCallback

useMemo

useMemo is a hook that memoizes a computed value, recomputing it only when one of the dependencies changes. It helps optimize performance by preventing expensive calculations on every render.

Example:

import React, { useState, useMemo } from 'react';

const ExpensiveCalculation = ({ number }) => {
  const computeFactorial = (n) => {
    console.log('Computing factorial...');
    return n <= 1 ? 1 : n * computeFactorial(n - 1);
  };

  const factorial = useMemo(() => computeFactorial(number), [number]);

  return <div>Factorial of {number} is {factorial}</div>;
};

const App = () => {
  const [number, setNumber] = useState(5);

  return (
    <div>
      <input
        type="number"
        value={number}
        onChange={(e) => setNumber(parseInt(e.target.value, 10))}
      />
      <ExpensiveCalculation number={number} />
    </div>
  );
};

export default App;

In this example, useMemo ensures that the factorial calculation is only recomputed when number changes.

useCallback

useCallback is a hook that memoizes a function, preventing its recreation on every render unless one of its dependencies changes. It is useful for passing stable functions to child components that rely on reference equality.

Example:

import React, { useState, useCallback } from 'react';

const Button = React.memo(({ onClick, children }) => {
  console.log(`Rendering button - ${children}`);
  return <button onClick={onClick}>{children}</button>;
});

const App = () => {
  const [count, setCount] = useState(0);

  const increment = useCallback(() => setCount((c) => c + 1), []);

  return (
    <div>
      <Button onClick={increment}>Increment</Button>
      <p>Count: {count}</p>
    </div>
  );
};

export default App;

In this example, useCallback ensures that the increment function is only recreated if its dependencies change, preventing unnecessary re-renders of the Button component.

Conclusion

Understanding React Hooks is essential for modern React development. They enable you to write cleaner, more maintainable code in functional components. By mastering hooks like useState, useEffect, useContext, and useReducer, as well as advanced patterns like custom hooks and performance optimizations with useMemo and useCallback, you can build robust and efficient React applications. As an intern, gaining a solid grasp of these concepts will set a strong foundation for your journey in React development.

...

🔧 Intern level: Lifecycle Methods and Hooks in React


📈 71.75 Punkte
🔧 Programmierung

🔧 Lead level: Lifecycle Methods and Hooks in React


📈 55.26 Punkte
🔧 Programmierung

🔧 Vue.js Lifecycle Hooks: A Deep Dive Into Component Lifecycle Management 🔄


📈 38.86 Punkte
🔧 Programmierung

🔧 scriptkavi/hooks: Customizable and Open Source React Hooks


📈 38.22 Punkte
🔧 Programmierung

🔧 Bridge Between Lifecycle Methods & Hooks


📈 37.86 Punkte
🔧 Programmierung

🔧 React Hooks – How to Use the useState & useEffect Hooks in Your Project


📈 36.56 Punkte
🔧 Programmierung

🔧 React Hooks – How to Use the useState & useEffect Hooks in Your Project


📈 36.56 Punkte
🔧 Programmierung

🔧 Bloodline of Hooks: Custom Hooks in React for Advanced Devs


📈 36.56 Punkte
🔧 Programmierung

🔧 Unraveling the Mysteries of JavaScript and React: Hooks, Callbacks, and Methods


📈 36.22 Punkte
🔧 Programmierung

🔧 A Beginner's Guide to React Hooks: Streamlining State and Lifecycle Management 🚀


📈 35.55 Punkte
🔧 Programmierung

🔧 Angular Lifecycle Hooks: A High Level Overview


📈 35.45 Punkte
🔧 Programmierung

🔧 Intern level: React State and Props


📈 33.88 Punkte
🔧 Programmierung

📰 Working as a Tech Business Analyst intern vs. Infrastructure Intern


📈 32.97 Punkte
📰 IT Security Nachrichten

🕵️ CVE-2022-40348 | Intern Record System 1.0 /intern/controller.php name/email cross site scripting


📈 32.97 Punkte
🕵️ Sicherheitslücken

🔧 Intern level: What is React? A Beginner's Guide


📈 32.22 Punkte
🔧 Programmierung

🔧 Intern level: Handling Events in React


📈 32.22 Punkte
🔧 Programmierung

🔧 Intern level: Managing Forms in React


📈 32.22 Punkte
🔧 Programmierung

🔧 Intern level: Routing with React Router


📈 32.22 Punkte
🔧 Programmierung

🔧 Flutter Hooks Tutorial: Flutter Animation Using Hooks (useEffect and useAnimationController)


📈 31.14 Punkte
🔧 Programmierung

🔧 Optimizing React Performance with Redux and React Hooks


📈 30.57 Punkte
🔧 Programmierung

🔧 Optimizing React Performance with Redux and React Hooks


📈 30.57 Punkte
🔧 Programmierung

🔧 Optimizing React Performance with Redux and React Hooks


📈 30.57 Punkte
🔧 Programmierung

🔧 Form Validation in React: An In-Depth Tutorial with Hooks and React Hook Form


📈 30.57 Punkte
🔧 Programmierung

🔧 React Lifecycle Methods Using Class & Functional Components


📈 30.2 Punkte
🔧 Programmierung

🔧 React Lifecycle Methods


📈 30.2 Punkte
🔧 Programmierung

🔧 Revolutionizing React: Unveiling the New Hooks in React 19🚀


📈 28.9 Punkte
🔧 Programmierung

🔧 Unlocking React's Power: Understanding React's Core Hooks


📈 28.9 Punkte
🔧 Programmierung

🔧 This Week In React #185: React Conf, React Query, refs, Next.js after, mini-react...


📈 28.32 Punkte
🔧 Programmierung

🔧 This Week In React #185: React Conf, React Query, refs, Next.js after, mini-react...


📈 28.32 Punkte
🔧 Programmierung

🎥 Dev Container Features & Lifecycle Hooks


📈 26.8 Punkte
🎥 Video | Youtube

🔧 Angular Series Part 1 Unlocking Angular Lifecycle Hooks: Your Path to Efficient Web Apps


📈 26.8 Punkte
🔧 Programmierung

🔧 Unlocking the Power of EC2 Auto Scaling using Lifecycle Hooks


📈 26.8 Punkte
🔧 Programmierung

🔧 Living without "lifecycle hooks"


📈 26.8 Punkte
🔧 Programmierung

🔧 Mastering React Component Lifecycle: The Foundation for React Concepts


📈 26.22 Punkte
🔧 Programmierung

matomo