<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: bernieslearnings</title>
    <description>The latest articles on DEV Community by bernieslearnings (@bernieslearning).</description>
    <link>https://dev.to/bernieslearning</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1110897%2Fd0424e8b-b7ef-486e-9a2a-2f7d4edfcc26.jpg</url>
      <title>DEV Community: bernieslearnings</title>
      <link>https://dev.to/bernieslearning</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/bernieslearning"/>
    <language>en</language>
    <item>
      <title>React State Management: A Comprehensive Guide</title>
      <dc:creator>bernieslearnings</dc:creator>
      <pubDate>Tue, 25 Jul 2023 07:30:43 +0000</pubDate>
      <link>https://dev.to/bernieslearning/react-state-management-a-comprehensive-guide-4170</link>
      <guid>https://dev.to/bernieslearning/react-state-management-a-comprehensive-guide-4170</guid>
      <description>&lt;p&gt;&lt;a href="https://react.dev"&gt;React&lt;/a&gt; state management is a crucial aspect of building robust and scalable React applications. As your application grows in complexity, efficiently managing and sharing data between components becomes challenging. &lt;/p&gt;

&lt;p&gt;This is where state management comes into play. In this article, we'll explore various state management techniques in React and discuss their pros and cons. By the end, you'll have a clear understanding of different approaches and be able to choose the right one for your projects.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is React state?
&lt;/h2&gt;

&lt;p&gt;React state is a built-in feature of React that allows components to manage and store data internally. State represents the current state of a component and determines how it renders and behaves. It enables components to keep track of dynamic data that can change over time due to user interactions, server responses, or any other relevant events.&lt;/p&gt;

&lt;p&gt;In React, developers typically use state to update and reflect data in the component's rendering. In Examples of state data include user input, form values, toggle switches, dropdown selections. It also includes any other information that can change during the component's lifecycle.&lt;/p&gt;

&lt;p&gt;State is an object that holds key-value pairs. Each key represents a specific data attribute and the corresponding value represents its current value. React components can access and modify their own state using the useState hook or class-based components using the &lt;code&gt;this.state&lt;/code&gt; object.&lt;/p&gt;

&lt;p&gt;When the state changes, React automatically re-renders the component, reflecting the updated data in the user interface. This declarative nature of React state simplifies the process of managing dynamic data. It also allows developers to build interactive and responsive applications efficiently.&lt;/p&gt;

&lt;p&gt;It's important to note that React state is local and specific to a particular component. If other components need access to the same data, it must be passed down as props or managed using a state management solution like React Context, Redux, or MobX.&lt;/p&gt;

&lt;h2&gt;
  
  
  Declaring and updating state with useState hook
&lt;/h2&gt;

&lt;p&gt;In React functional components, the &lt;code&gt;useState&lt;/code&gt; hook is used to declare and update state. The &lt;code&gt;useState&lt;/code&gt; hook is part of the React Hooks API introduced in React 16.8, which allows functional components to have their own state and lifecycle methods.&lt;/p&gt;

&lt;p&gt;Here's an example of declaring and updating state using the &lt;code&gt;useState&lt;/code&gt; hook:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import React, { useState } from 'react';

function Counter() {
  // Declare a state variable named 'count' and initialize it with 0
  const [count, setCount] = useState(0);

  // Event handler for incrementing the count
  const incrementCount = () =&amp;gt; {
    setCount(count + 1); // Update the state by modifying 'count' using setCount
  };

  return (
    &amp;lt;div&amp;gt;
      &amp;lt;p&amp;gt;Count: {count}&amp;lt;/p&amp;gt;
      &amp;lt;button onClick={incrementCount}&amp;gt;Increment&amp;lt;/button&amp;gt;
    &amp;lt;/div&amp;gt;
  );
}

export default Counter;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In the example above, we have a functional component called Counter that maintains a count state.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--noSsEZkz--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ya0kryeuo1yyha22qwci.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--noSsEZkz--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ya0kryeuo1yyha22qwci.png" alt="Image description" width="384" height="124"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To declare a state variable, we use the &lt;code&gt;useState&lt;/code&gt; hook by invoking it with an initial value (in this case, 0). The &lt;code&gt;useState&lt;/code&gt; hook returns an array with two elements: the current state value &lt;code&gt;count&lt;/code&gt; and a function &lt;code&gt;setCount&lt;/code&gt; to update the state.&lt;/p&gt;

&lt;p&gt;In the JSX code, we display the current value of the count state using &lt;code&gt;{count}&lt;/code&gt; within the &lt;code&gt;&amp;lt;p&amp;gt;&lt;/code&gt; element. The &lt;code&gt;&amp;lt;button&amp;gt;&lt;/code&gt; element has an &lt;code&gt;onClick&lt;/code&gt; event handler, &lt;code&gt;incrementCount&lt;/code&gt;, which is called when the button is clicked.&lt;/p&gt;

&lt;p&gt;Inside the &lt;code&gt;incrementCount&lt;/code&gt; function, we update the state by calling &lt;code&gt;setCount&lt;/code&gt; with the new value &lt;code&gt;count + 1&lt;/code&gt;. This triggers a re-render of the component with the updated state value, reflecting the incremented count on the UI.&lt;/p&gt;

&lt;p&gt;By using the &lt;code&gt;useState&lt;/code&gt; hook, we can easily declare and manage state within functional components, making them more powerful and flexible.&lt;/p&gt;

&lt;h2&gt;
  
  
  Managing complex state objects
&lt;/h2&gt;

&lt;p&gt;Consider an example of managing a deck of playing cards using complex state objects with the useState hook. We'll create a simple React component to shuffle and draw cards from the deck.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import React, { useState, useEffect } from 'react';

function CardDeck() {
  const [deck, setDeck] = useState([]);

  // Create a deck of cards when the component mounts
  useEffect(() =&amp;gt; {
    initializeDeck();
  }, []);

  // Function to initialize the deck of cards
  const initializeDeck = () =&amp;gt; {
    const suits = ['Hearts', 'Diamonds', 'Clubs', 'Spades'];
    const ranks = ['Ace', '2', '3', '4', '5', '6', '7', '8', '9', '10', 'Jack', 'Queen', 'King'];

    const newDeck = [];
    for (const suit of suits) {
      for (const rank of ranks) {
        newDeck.push({ suit, rank });
      }
    }

    setDeck(newDeck);
  };

  // Function to shuffle the deck
  const shuffleDeck = () =&amp;gt; {
    const shuffledDeck = [...deck];
    for (let i = shuffledDeck.length - 1; i &amp;gt; 0; i--) {
      const j = Math.floor(Math.random() * (i + 1));
      [shuffledDeck[i], shuffledDeck[j]] = [shuffledDeck[j], shuffledDeck[i]];
    }
    setDeck(shuffledDeck);
  };

  // Function to draw a card from the deck
  const drawCard = () =&amp;gt; {
    if (deck.length === 0) {
      alert('The deck is empty. Please shuffle the deck.');
      return;
    }

    const drawnCard = deck.pop();
    setDeck([...deck]);
    alert(`You drew the ${drawnCard.rank} of ${drawnCard.suit}`);
  };

  return (
    &amp;lt;div&amp;gt;
      &amp;lt;h1&amp;gt;Card Deck&amp;lt;/h1&amp;gt;
      &amp;lt;button onClick={shuffleDeck}&amp;gt;Shuffle Deck&amp;lt;/button&amp;gt;
      &amp;lt;button onClick={drawCard}&amp;gt;Draw Card&amp;lt;/button&amp;gt;
    &amp;lt;/div&amp;gt;
  );
}

export default CardDeck;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In this example, we initialize the deck state as an empty array using the &lt;code&gt;useState&lt;/code&gt; hook. When the component mounts, the &lt;code&gt;useEffect&lt;/code&gt; hook is used to call the &lt;code&gt;initializeDeck&lt;/code&gt; function, which creates a deck of playing cards by combining suits and ranks.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--6GdOFqBs--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ctqgexkpzd8thg4tl6fm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--6GdOFqBs--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ctqgexkpzd8thg4tl6fm.png" alt="Image description" width="800" height="1009"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;shuffleDeck&lt;/code&gt; function shuffles the deck by creating a copy of the deck array and applying the Fisher-Yates shuffle algorithm. The shuffled deck is then set as the new state using &lt;code&gt;setDeck&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--4rj8hU9D--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/7bcybugx0bbxawngr9dd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--4rj8hU9D--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/7bcybugx0bbxawngr9dd.png" alt="Image description" width="800" height="1019"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;drawCard&lt;/code&gt; function pops the last card from the deck, updates the deck state by creating a new array without the drawn card, and displays an alert with the card's rank and suit.&lt;/p&gt;

&lt;p&gt;In the JSX code, we render buttons for shuffling the deck and drawing a card. When the buttons are clicked, the corresponding functions are called, modifying the state and triggering a re-render of the component.&lt;/p&gt;

&lt;p&gt;With this example, we can manage the state of a deck of cards, shuffle it, and draw cards from it using complex state objects within a React component.&lt;/p&gt;

&lt;h2&gt;
  
  
  Handling asynchronous updates
&lt;/h2&gt;

&lt;p&gt;Let's enhance the previous example of managing a deck of playing cards. We will be simulating an asynchronous update when shuffling the deck. We'll introduce a delay using setTimeout to simulate an API call or any asynchronous operation.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import React, { useState } from 'react';

function CardDeck() {
  const [deck, setDeck] = useState([]);
  const [isLoading, setIsLoading] = useState(false);

  // Function to initialize the deck of cards
  const initializeDeck = () =&amp;gt; {
    const suits = ['Hearts', 'Diamonds', 'Clubs', 'Spades'];
    const ranks = ['Ace', '2', '3', '4', '5', '6', '7', '8', '9', '10', 'Jack', 'Queen', 'King'];

    const newDeck = [];
    for (const suit of suits) {
      for (const rank of ranks) {
        newDeck.push({ suit, rank });
      }
    }

    setDeck(newDeck);
  };

  // Function to simulate asynchronous deck shuffling
  const shuffleDeck = () =&amp;gt; {
    setIsLoading(true);

    // Simulate an API call or an asynchronous operation
    setTimeout(() =&amp;gt; {
      const shuffledDeck = [...deck];
      for (let i = shuffledDeck.length - 1; i &amp;gt; 0; i--) {
        const j = Math.floor(Math.random() * (i + 1));
        [shuffledDeck[i], shuffledDeck[j]] = [shuffledDeck[j], shuffledDeck[i]];
      }
      setDeck(shuffledDeck);
      setIsLoading(false);
    }, 2000);
  };

  return (
    &amp;lt;div&amp;gt;
      &amp;lt;h1&amp;gt;Card Deck&amp;lt;/h1&amp;gt;
      &amp;lt;button onClick={initializeDeck}&amp;gt;Initialize Deck&amp;lt;/button&amp;gt;
      &amp;lt;button onClick={shuffleDeck} disabled={isLoading}&amp;gt;
        {isLoading ? 'Shuffling...' : 'Shuffle Deck'}
      &amp;lt;/button&amp;gt;
    &amp;lt;/div&amp;gt;
  );
}

export default CardDeck;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In this example, we introduce a new state variable &lt;code&gt;isLoading&lt;/code&gt; using the &lt;code&gt;useState&lt;/code&gt; hook to track the loading state while shuffling the deck. Initially, it's set to false. When the shuffle button is clicked, &lt;code&gt;isLoading&lt;/code&gt; is set to true, and the button text changes to "Shuffling…".&lt;/p&gt;

&lt;p&gt;Inside the &lt;code&gt;shuffleDeck&lt;/code&gt; function, before shuffling the deck, we set &lt;code&gt;isLoading&lt;/code&gt; to true to indicate that the shuffling operation is in progress. We simulate an asynchronous operation using &lt;code&gt;setTimeout&lt;/code&gt; for a delay of 2000 milliseconds (2 seconds) to represent a potential delay from an API call or other async task.&lt;/p&gt;

&lt;p&gt;Once the shuffle operation completes, we update the deck state with the shuffled deck, set &lt;code&gt;isLoading&lt;/code&gt; back to false, and the button text reverts to "Shuffle Deck".&lt;/p&gt;

&lt;p&gt;The button is disabled while the shuffling operation is in progress by utilizing the disabled attribute based on the isLoading state.&lt;/p&gt;

&lt;p&gt;By adding the asynchronous behaviour to the shuffle operation, we can create a more realistic example of handling asynchronous updates in React.&lt;/p&gt;

&lt;h2&gt;
  
  
  Passing state through props
&lt;/h2&gt;

&lt;p&gt;Passing state through props is a common technique in React to share data between components. Let's continue with the example of managing a deck of playing cards. We'll demonstrate how to pass the deck state to a child component using props.&lt;/p&gt;

&lt;p&gt;In the parent component, we'll render a child component called DeckInfo and pass the deck state as a prop to it.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import React, { useState } from 'react';

function CardDeck() {
  const [deck, setDeck] = useState([]);

  // Function to initialize the deck of cards
  const initializeDeck = () =&amp;gt; {
    // ... deck initialization code ...
  };

  // Function to shuffle the deck
  const shuffleDeck = () =&amp;gt; {
    // ... deck shuffling code ...
  };

  return (
    &amp;lt;div&amp;gt;
      &amp;lt;h1&amp;gt;Card Deck&amp;lt;/h1&amp;gt;
      &amp;lt;button onClick={initializeDeck}&amp;gt;Initialize Deck&amp;lt;/button&amp;gt;
      &amp;lt;button onClick={shuffleDeck}&amp;gt;Shuffle Deck&amp;lt;/button&amp;gt;
      &amp;lt;DeckInfo deck={deck} /&amp;gt;
    &amp;lt;/div&amp;gt;
  );
}

function DeckInfo({ deck }) {
  return (
    &amp;lt;div&amp;gt;
      &amp;lt;h2&amp;gt;Deck Information&amp;lt;/h2&amp;gt;
      &amp;lt;p&amp;gt;Number of cards: {deck.length}&amp;lt;/p&amp;gt;
      {/* Additional information about the deck */}
    &amp;lt;/div&amp;gt;
  );
}

export default CardDeck;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In this example, we have the &lt;code&gt;CardDeck&lt;/code&gt; component as the parent component and the &lt;code&gt;DeckInfo&lt;/code&gt; component as the child component. The &lt;code&gt;DeckInfo&lt;/code&gt; component displays information about the deck, such as the number of cards.&lt;/p&gt;

&lt;p&gt;In the &lt;code&gt;CardDeck&lt;/code&gt; component, we render the &lt;code&gt;DeckInfo&lt;/code&gt; component within the parent component's JSX. We pass the deck state as a prop to the &lt;code&gt;DeckInfo&lt;/code&gt; component using the syntax &lt;code&gt;{deck}&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;DeckInfo&lt;/code&gt; component receives the deck prop as an argument in its functional component definition. Inside the &lt;code&gt;DeckInfo&lt;/code&gt; component, we can access the deck prop just like any other regular prop, and use it to display relevant information.&lt;/p&gt;

&lt;p&gt;In this case, we display the number of cards in the deck using &lt;code&gt;{deck.length}&lt;/code&gt;. You can add additional JSX and logic to the &lt;code&gt;DeckInfo&lt;/code&gt; component as per your requirements to display more detailed information about the deck.&lt;/p&gt;

&lt;p&gt;By passing the deck state as a prop from the parent component to the child component, we can easily share and utilize the state data in different components, promoting reusability and component composition in React applications.&lt;/p&gt;

&lt;h2&gt;
  
  
  Limitations and challenges
&lt;/h2&gt;

&lt;p&gt;While state in React provides a powerful mechanism for managing and updating data within components, it also has some limitations and challenges that developers should be aware of:&lt;/p&gt;

&lt;h3&gt;
  
  
  Propagation and Inversion of Control
&lt;/h3&gt;

&lt;p&gt;When state needs to be shared between multiple components, it can result in prop drilling, passing down props through several intermediate components. This can make the codebase more complex and harder to maintain and understand. It also requires components that don't directly use the state to act as intermediaries for passing the state down.&lt;/p&gt;

&lt;h3&gt;
  
  
  Managing Complex State
&lt;/h3&gt;

&lt;p&gt;As the complexity of state increases, it can become challenging to manage and update state accurately. Complex state objects may involve nested data structures, which can lead to potential issues in immutability, updating nested values, or comparing and detecting changes efficiently.&lt;/p&gt;

&lt;h3&gt;
  
  
  Component Coupling
&lt;/h3&gt;

&lt;p&gt;State is typically tied to a specific component. As a result, sharing state between unrelated components can be challenging, leading to coupling between components. Changes to one component's state may require updates to other components that depend on that state, making the code more tightly coupled and difficult to refactor.&lt;/p&gt;

&lt;h3&gt;
  
  
  Performance Considerations
&lt;/h3&gt;

&lt;p&gt;Frequent updates to state can trigger unnecessary re-renders of components, impacting performance. It's important to optimize state updates using techniques like memoization, shouldComponentUpdate (in-class components), or React's memo and useCallback hooks to avoid unnecessary re-renders and improve performance.&lt;/p&gt;

&lt;h3&gt;
  
  
  Testing and Debugging
&lt;/h3&gt;

&lt;p&gt;Testing and debugging components that rely heavily on state can be challenging. Stateful components may have complex interactions and behaviours based on different states, making it harder to write effective unit tests and debug issues.&lt;/p&gt;

&lt;h3&gt;
  
  
  Scalability and State Management Complexity
&lt;/h3&gt;

&lt;p&gt;As an application grows in size and complexity, managing state solely with React's built-in state management techniques may become insufficient. More advanced state management solutions, such as React Context, Redux, or MobX, might be required to handle complex state management scenarios and improve scalability.&lt;/p&gt;

&lt;p&gt;To address these limitations and challenges, developers can leverage state management libraries like Redux, MobX, or Recoil, or explore other architectural patterns such as component composition, lifting state up, or adopting global state management approaches. Choosing the right state management solution depends on the specific needs and requirements of the application.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;State management is a vital part of building React applications. Developers can make informed decisions based on their project requirements by understanding different state management techniques like local state, React Context, Redux, MobX, and other libraries. It's important to weigh the trade-offs and consider factors such as project size, complexity, and performance when choosing the most appropriate state management solution.&lt;/p&gt;

&lt;p&gt;As always, don't forget to check out my other React articles &lt;a href="https://bernieslearnings.com/tag/react"&gt;here&lt;/a&gt;&lt;/p&gt;

</description>
      <category>react</category>
      <category>webdev</category>
      <category>programming</category>
      <category>javascript</category>
    </item>
    <item>
      <title>React Dev Tools In Firefox</title>
      <dc:creator>bernieslearnings</dc:creator>
      <pubDate>Sat, 15 Jul 2023 09:06:41 +0000</pubDate>
      <link>https://dev.to/bernieslearning/react-dev-tools-in-firefox-5caj</link>
      <guid>https://dev.to/bernieslearning/react-dev-tools-in-firefox-5caj</guid>
      <description>&lt;p&gt;Debugging React apps through an IDE like VS Code or WebStorm handles one aspect of inspecting your React app. The other main aspect is seeing what is happening in your browser as your app runs. Fortunately, we can see what is happening in the browser using the React Dev Tools extension.&lt;/p&gt;

&lt;h2&gt;
  
  
  The React Dev Tools extension
&lt;/h2&gt;

&lt;p&gt;This extension allows developers to examine the React tree of components and to profile aspects of the application. For example, you can set up the tool to see when components render as the state of the application changes. This information cannot be easily seen from within an IDE by looking at the code.&lt;/p&gt;

&lt;h2&gt;
  
  
  Installing the React Dev Tools Extension In Firefox
&lt;/h2&gt;

&lt;p&gt;To get started, go to the Mozilla add-ons site. You should see something similar to this page:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpscxatdwp2a320xhq6mj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpscxatdwp2a320xhq6mj.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Click the &lt;em&gt;Add to Firefox&lt;/em&gt; button to install the extension.&lt;/p&gt;

&lt;p&gt;You will be prompted to allow the extension to access data for all websites, input data to the clipboard and more. You’ll need to click the &lt;em&gt;Add&lt;/em&gt; button to continue the installation. The prompt should look something like this:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp4b1nxeobldmx0s6q3d0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp4b1nxeobldmx0s6q3d0.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Lastly, you will see a prompt asking you to allow the extension to run during an InPrivate window session. It is a good idea to allow this so you can debug your React app without worrying about the site being affected by caching. The prompt should be similar to this:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmwilt31yray3c9zfdcbp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmwilt31yray3c9zfdcbp.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Check the check box and click &lt;em&gt;Okay&lt;/em&gt; to continue.&lt;/p&gt;

&lt;h2&gt;
  
  
  The React Dev Tools Icon
&lt;/h2&gt;

&lt;p&gt;Now that you’ve installed the extension, you should see a greyed-out React icon in the top right-hand corner of your browser. It should look like this (highlighted in orange):&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fm9fq0k6tvc8ve3nzjd8j.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fm9fq0k6tvc8ve3nzjd8j.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The icon is greyed out like above because the site you are currently on is not a React site. We need to browse a React site to test if the extension is working.&lt;/p&gt;

&lt;p&gt;A good example of a React website (when writing this article) is the task management application, Asana. If you go to &lt;a href="https://asana.com" rel="noopener noreferrer"&gt;this&lt;/a&gt; website, you will see the extension become coloured, looking like this:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7pbspmganpq2cuhiu8fq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7pbspmganpq2cuhiu8fq.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you left-click this icon, you will see a message appear saying that the page is using a production build of React. This means the site is optimised by removing debugging information, optimising assets and minifying the code. The message should look something similar to the image below:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk89hg2m5mfdlxjsqdbft.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk89hg2m5mfdlxjsqdbft.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A quick way to tell if you are viewing a site that is the production build is to note the colour of the extension icon itself. The black background is the indicator that the site is a production build. A red background indicates a development build.&lt;/p&gt;

&lt;p&gt;Here is an example of the icon on a development site:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqt9fe15edq9tfhzodskr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqt9fe15edq9tfhzodskr.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Inspecting A Development Build Of A React Site.
&lt;/h2&gt;

&lt;p&gt;Now that we’re browsing a development version of a React site, we can click the icon and get more information. The prompt should be similar to this:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5c3myvzxwyw099isu3qt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5c3myvzxwyw099isu3qt.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The information mentions that the current build is suitable for debugging but releasing to production (which is what we want to see). It also mentions that when opening the developer tools, we should see two new tabs: Components and Profiler.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff8zasf7713hw3h14l3v4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff8zasf7713hw3h14l3v4.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The Components Tab
&lt;/h2&gt;

&lt;p&gt;Opening the developer tools and clicking the Components button opens the components tab. This tab shows the list of React components in your current view. &lt;/p&gt;

&lt;p&gt;To view a particular component's details in the components tab, you can use the select tool to select the component from the view. &lt;/p&gt;

&lt;p&gt;This is the select icon described above: &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5t9n3iygp8pxeafgsx8d.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5t9n3iygp8pxeafgsx8d.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you hover over the icon, you get some more information:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl6pj3c7m1j95b46xunkf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl6pj3c7m1j95b46xunkf.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Following the prompt's advice, we can click the select icon and select an element on the page to inspect it.&lt;/p&gt;

&lt;p&gt;In the image below, I have selected a button in my application:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Faveopmgzlwys59fdj818.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Faveopmgzlwys59fdj818.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Breaking down the components tab into sections
&lt;/h3&gt;

&lt;p&gt;The view can be broken down into four distinct areas. The orange area is the tree view of all the components in the current view. The green area represents the properties (props) of the currently selected element. The purple area designates the hooks of the selected element, and the blue area shows the parent tree of how the selected element was rendered.&lt;/p&gt;

&lt;p&gt;You can think of the component view as a key/value (master/detail) pair with the key being the component selected on the left-hand side and the value being the information about the key on the right-hand side.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr292rhp215v9copwgdgo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr292rhp215v9copwgdgo.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This view may change depending on the selected element. The above description is an overview of what you might be looking at.&lt;/p&gt;

&lt;p&gt;On the right-hand side of the components tab, you will see the following icons:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpiypylkwp1vrzibsny2j.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpiypylkwp1vrzibsny2j.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  The stopwatch icon
&lt;/h3&gt;

&lt;p&gt;The stopwatch icon is used to suspend components. To do this, the component that you’ve selected will need to be within a Suspense container, or you will get the following message:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5m25b1rfb04gc1em8f3x.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5m25b1rfb04gc1em8f3x.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can learn more about suspense in my other how-to articles:&lt;/p&gt;

&lt;p&gt;» &lt;a href="https://bernieslearnings.com/code-splitting-with-lazy-and-suspense-in-react/" rel="noopener noreferrer"&gt;Code splitting with lazy and Suspense in React&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;» &lt;a href="https://bernieslearnings.com/suspense-without-lazy-in-react/" rel="noopener noreferrer"&gt;Suspense without lazy in React&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;» &lt;a href="https://bernieslearnings.com/lazy-loading-and-suspense-in-react/" rel="noopener noreferrer"&gt;Lazy loading and Suspense in React&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;» &lt;a href="https://bernieslearnings.com/rendering-a-list-of-lazy-components-in-react/" rel="noopener noreferrer"&gt;Rendering a list of lazy components in React&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  The eye icon
&lt;/h3&gt;

&lt;p&gt;The eye icon, when clicked, will take you to the corresponding DOM element. For example, I wrap an &lt;em&gt;Image&lt;/em&gt; component with properties such as alt text, name, src etc. When I click this component in the component tree and then click on the eye icon, I am taken out of the React Dev Tools to the inspector tab, where the element selected is the &lt;em&gt;img&lt;/em&gt; element.&lt;/p&gt;

&lt;h3&gt;
  
  
  The bug icon
&lt;/h3&gt;

&lt;p&gt;The bug icon will log the current component to the console. For example, I clicked the bug icon while having my aforementioned Image component selected. This was the output to the console:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fec1q80yrkqzxy14va0pp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fec1q80yrkqzxy14va0pp.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  The &amp;lt;&amp;gt; icon
&lt;/h3&gt;

&lt;p&gt;The &amp;lt;&amp;gt; icon will take you to the source code for your component. When selecting a component from the component tree, clicking this icon will take you to the debugger tab, open the source file and highlight the first line of your component. For example, my application has Beds as a component. Clicking the icon shows me this:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1xkqgroqrev5j5vkj8rm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1xkqgroqrev5j5vkj8rm.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Component Search Box
&lt;/h3&gt;

&lt;p&gt;You can also use the search box above the component tree to find your components. In the example below, I’m searching for beds, and you can see the number of beds components in the tree and navigate between these matches using the up/down arrow:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhuv480jso2ltb5i4e4p8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhuv480jso2ltb5i4e4p8.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Component Details
&lt;/h3&gt;

&lt;p&gt;The detail side of the component tab will sometimes show checkboxes and other icons, like in this image:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flbhc7dwy5b10sehovtqv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flbhc7dwy5b10sehovtqv.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Starting with the hooks, you will notice two icons on the right. &lt;/p&gt;

&lt;h3&gt;
  
  
  The magic wand hook
&lt;/h3&gt;

&lt;p&gt;The first icon (that looks like a magic wand) is a special tool that will update the names of the hooks to match what you’ve named them in your source code. &lt;/p&gt;

&lt;p&gt;Doing this makes it much easier (especially in larger components) to see what is going on in your application. Here is the above image after clicking the wand.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnsp6160g6lt3s0r60spk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnsp6160g6lt3s0r60spk.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can now see which hook relates to what variable. This makes debugging a whole lot easier. Just note that by doing this, you will face a performance hit from the dev tools. You can see this by hovering over the wand and viewing the tooltip:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjmuc4b54g1zdtl1xnkgd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjmuc4b54g1zdtl1xnkgd.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If the performance hit is too great, I might break my component down further or selectively parse hook names when I need to debug that section specifically.&lt;/p&gt;

&lt;h3&gt;
  
  
  The square with dots icon
&lt;/h3&gt;

&lt;p&gt;The next icon is the square icon with the dots to the left and bottom of the square. You will copy the hooks information in JSON format when clicking this icon. This will allow you to view the hooks information in another app (or programmatically process it somewhere else).&lt;/p&gt;

&lt;p&gt;Here is an example (in VS Code) of the information copied when clicking the icon with the Beds component selected:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffe2hbds2lo1er7p3abdj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffe2hbds2lo1er7p3abdj.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You will also see this icon in the React dev tools tabs. It will always be the &lt;em&gt;copy to the clipboard&lt;/em&gt; button and will copy the related information (nearest to the button) to the clipboard.&lt;/p&gt;

&lt;p&gt;The checkbox icon on the right-hand side will appear when dealing with boolean values in hooks or props. You can manually toggle between true and false for the hook or prop. &lt;/p&gt;

&lt;p&gt;Doing this lets, you see (in real-time) how your application will look with either value. This can be extremely handy when determining why a specific component isn’t displayed in your app.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Profiler Tab
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkwn2g94eedps96tghn7d.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkwn2g94eedps96tghn7d.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When you first click on the Profiler tab in the React Dev Tools extension, you will see something similar to the below image:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvnvabjhwreogi5r7fmod.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvnvabjhwreogi5r7fmod.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can get started by clicking on the blue record button to start recording. Once the profiler is recording, you can use your application as you normally would. When you’ve finished recording the parts of your application you want to profile, come back to the Profiler tab and click the record button again, which will now be a red circle to indicate that the profiler is recording.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy493r6gmkmb6739k16gy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy493r6gmkmb6739k16gy.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The Flamegraph Chart
&lt;/h2&gt;

&lt;p&gt;When you’ve stopped recording, you will get a flamegraph like the one below:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo7ws8oebr1exlzsr0o1e.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo7ws8oebr1exlzsr0o1e.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Looking at the top of the chart, you’ll see two numbers. These numbers relate to the commits that occurred when you were using the application. A commit is when React applies changes to the DOM (at least at a high level).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpx3h6t4p707n4yr9zqwj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpx3h6t4p707n4yr9zqwj.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In this example, there are ten commits, and we are viewing the first commit.&lt;/p&gt;

&lt;p&gt;The blue bar in the chart represents the currently selected commit. If we select the fifth commit, the chart will look like this:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fs5v7t07l95f9q8j45w9g.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fs5v7t07l95f9q8j45w9g.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can move between commits by clicking the back and forward arrows or clicking on the chart bar. The height of the bars represents how long the render took to commit.&lt;/p&gt;

&lt;h3&gt;
  
  
  Commit Information
&lt;/h3&gt;

&lt;p&gt;On the right-hand side, you will see the commit information. It will tell you when the commit occurred and how long it took to render it. It will also tell you the scheduler’s priority of the commit. Priority can be one of several different types:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Immediate&lt;/li&gt;
&lt;li&gt;Normal&lt;/li&gt;
&lt;li&gt;Low&lt;/li&gt;
&lt;li&gt;User Blocking&lt;/li&gt;
&lt;li&gt;Idle&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I won’t dive into these priorities in this article. It’s enough to know they exist now and that React has a scheduler to determine when to render or re-render a component.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx0yie12scae6g1q557yx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx0yie12scae6g1q557yx.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Flamegraph explained
&lt;/h3&gt;

&lt;p&gt;In the flamegraph (image below), you can see what components are rendered on each commit and how long each component took to render. The length of the bar represents how long the component took to render. The coloured components are the components rendered during that commit. The grey components did not render during the commit.&lt;/p&gt;

&lt;p&gt;Taking our beds component example from earlier, we can see that only the Beds component and its children were rendered during this commit. Unsurprisingly, each of the children components of Beds rendered in less time than Beds did.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdeu1ss6gjcyhqz5nb1nq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdeu1ss6gjcyhqz5nb1nq.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Hovering over the Beds component will show you some more information:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqg5iqxjkyvosh28uvzyp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqg5iqxjkyvosh28uvzyp.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This tells me that the entire duration of the commit was 11ms and that Beds took only 1ms to render.&lt;/p&gt;

&lt;p&gt;By clicking on a component, the view will zoom to fit that component to the screen's width. Here is the flamegraph after I’ve clicked the &lt;em&gt;Beds&lt;/em&gt; component:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbzh0sd0s8v68w42cyqss.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbzh0sd0s8v68w42cyqss.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Zooming in the flamegraph
&lt;/h4&gt;

&lt;p&gt;You can see that the width of the &lt;em&gt;Beds&lt;/em&gt; component is now the width of the flamegraph. You should also note the area I highlighted on the right-hand side. This shows all the times the Beds component was rendered during the recorded commits.&lt;/p&gt;

&lt;p&gt;Having this list of times when a component is rendered can highlight issues in your application if a component is being re-rendered too often or more often than you would expect.&lt;/p&gt;

&lt;p&gt;To zoom back out to the original view, you can click in the white space under the flamegraph.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8t7vvjbcm1nwnmwsi1qd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8t7vvjbcm1nwnmwsi1qd.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Saving flamegraph data
&lt;/h4&gt;

&lt;p&gt;If you want to examine your profiling data later or use another tool, you can save the profile to disk as a JSON file by clicking the down arrow (next to the Flamegraph tab). If you want to reload the data later, click the up arrow and import the JSON file into Firefox.&lt;/p&gt;

&lt;p&gt;Clicking the circle with a line through it will clear the current profile data ready for you to re-record or import some new data.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Ranked Chart
&lt;/h2&gt;

&lt;p&gt;React Dev Tools has a &lt;em&gt;Ranked Chart&lt;/em&gt; that serves one specific purpose - to show an ordered list of components sorted by time taken to render. The component at the top of the chart will be the component that took the longest to render.&lt;/p&gt;

&lt;p&gt;This chart is useful if you believe that a single component is a bottleneck in the performance of your application.&lt;/p&gt;

&lt;p&gt;Here is a Ranked chart for the first commit of the app with the &lt;em&gt;Beds&lt;/em&gt; component.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhkhxpwbp298xoozo31vo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhkhxpwbp298xoozo31vo.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Considering the short time the entire commit took to render, it might be difficult to see, but the &lt;em&gt;View&lt;/em&gt; and &lt;em&gt;Beds&lt;/em&gt; components took the entire time to render. Several other components took little time (compared to &lt;em&gt;Beds&lt;/em&gt;) to render. These components are the thin green bars you see underneath the yellow ones.&lt;/p&gt;

&lt;p&gt;Hovering over one of these green components, you can see more information:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8iu7wo0rhqz4euki5j19.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8iu7wo0rhqz4euki5j19.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The React Dev Tools Settings
&lt;/h2&gt;

&lt;p&gt;You can get to the settings screen if you click on the gear icon next to the commit bars:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1p4w25q8inzh8u6dons5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1p4w25q8inzh8u6dons5.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;There are four tabs in the settings screen, General, Debugging, Components and Profiler.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8c2obj4slmboafy9do3q.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8c2obj4slmboafy9do3q.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  General Settings
&lt;/h2&gt;

&lt;p&gt;The General tab has three options:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;To set a light or dark theme (or follow the system settings)&lt;/li&gt;
&lt;li&gt;To display the charts in a compact and comfortable fashion (the height of the component bars change along with some extra spacing when using comfortable mode)&lt;/li&gt;
&lt;li&gt;Highlighting components when they render&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk9nd4o913lmq1ccsjf36.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk9nd4o913lmq1ccsjf36.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you select Dark as the theme, the settings screen will look like this:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7k5c84ltpvhdviy2oibd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7k5c84ltpvhdviy2oibd.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And the Flamegraph will look like this:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3ekf9vh676h5skm7ihyx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3ekf9vh676h5skm7ihyx.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The previous examples used the compact display. If you change this setting to comfortable mode, the Flamegraph will look like this:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1sflp6vwro19rscc805r.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1sflp6vwro19rscc805r.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you check the checkbox to highlight components when they render, you will see blue boxes outlining your components when they render. This can be very useful if a component is rendering at a strange time. &lt;/p&gt;

&lt;p&gt;For example, if your menu re-renders every time a character is typed or a button clicks, then this could mean you unintentionally have some kind of state tied to the menu.&lt;/p&gt;

&lt;p&gt;Here is an example of the highlight that occurs once I click the add bed button in my app:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzeotdj1tx9vk02lqqpp6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzeotdj1tx9vk02lqqpp6.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Debugging Settings
&lt;/h2&gt;

&lt;p&gt;The &lt;em&gt;Debugging&lt;/em&gt; tab has four settings:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyxtzgjjexffvq2qpv6ej.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyxtzgjjexffvq2qpv6ej.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Component Stacks
&lt;/h3&gt;

&lt;p&gt;Appending component stacks to console warnings and errors. This refers to what is shown in the console when you use console.warn() and console.error() to display console messages. An example of console.warn() with the component stacks appended is below:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhl5y7761c7hr8agacz5j.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhl5y7761c7hr8agacz5j.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And an example of using console.warn() without the appended component stacks:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fznuprbgdbouoit44520t.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fznuprbgdbouoit44520t.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Show inline warnings and errors
&lt;/h3&gt;

&lt;p&gt;This refers to the symbols placed beside component names in the stack. The example below shows a warning for the &lt;em&gt;Beds&lt;/em&gt; component:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh5wz6gq4hb7kh641gk0u.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh5wz6gq4hb7kh641gk0u.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can see that the &lt;em&gt;Beds&lt;/em&gt; component shows the yellow warning symbol. The search bar also has an icon followed by the number 2. This tells us that there are two warnings on the page now. You can cycle between the errors using the up and down arrows.&lt;/p&gt;

&lt;h3&gt;
  
  
  Break on warnings
&lt;/h3&gt;

&lt;p&gt;You can use the break-on warnings checkbox to pause the execution of the application at the point a warning is raised. Using the above site with the &lt;em&gt;Beds&lt;/em&gt; component and the checkbox ticked, we are taken to the &lt;em&gt;Debugger&lt;/em&gt; tab and the application is paused on this line:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl309039dackhciwp0lpr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl309039dackhciwp0lpr.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;There are clear instructions from the React developers about what to do next. To step out of the function, you can use the up-and-right arrow button in the debugger tools:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy76tc693ezsv1e40z552.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy76tc693ezsv1e40z552.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Following the instruction to step out of this function we can see this:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fts6mzgu3f9f0xq5otfib.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fts6mzgu3f9f0xq5otfib.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Looking at the source code, we can easily see where the warning has come from (console.warn(‘Message two’)).&lt;/p&gt;

&lt;h3&gt;
  
  
  Hide logs during second render in Strict Mode
&lt;/h3&gt;

&lt;p&gt;In React 18, a decision was made so that logs would not be silenced on double renders. This was confusing for some developers trying to debug their applications in React 17.&lt;/p&gt;

&lt;p&gt;For example, if a developer placed a log message in a component to test when it gets rendered, it would disappear from subsequent renders (sometimes), making it more difficult to debug.&lt;/p&gt;

&lt;p&gt;This checkbox allows developers to go back to the React 17 style of suppressing log messages, which is disabled by default. React 18 will show the subsequent log messages in muted colours.&lt;/p&gt;

&lt;p&gt;For example, this image shows React 18 with the checkbox unchecked:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb14cmvzdzck50blmc2cc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb14cmvzdzck50blmc2cc.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Notice how the second log message is slightly duller than the original one.&lt;/p&gt;

&lt;p&gt;When the checkbox is checked, the second log message is not displayed and we only see the original message:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fezsj0bzubhb2b0tbbeb3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fezsj0bzubhb2b0tbbeb3.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Components Settings
&lt;/h2&gt;

&lt;p&gt;The settings' Components tab relates to the Dev Tools' Components tab.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fn9v8birx2vcvhauik5qm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fn9v8birx2vcvhauik5qm.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Expand component tree by default
&lt;/h3&gt;

&lt;p&gt;The first checkbox determines if the component tree view starts with all nodes expanded or compressed. The following image shows all nodes expanded:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flehesb9s7xadwrpn7xne.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flehesb9s7xadwrpn7xne.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The next image shows when the checkbox is not checked. Therefore not all nodes are expanded:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9kwqu07paoqjs2tfldg1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9kwqu07paoqjs2tfldg1.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Notice how the bottom &lt;em&gt;Card&lt;/em&gt; element is not expanded. Only the elements leading to the currently selected element were expanded. If you haven’t selected a component, then only the root node will be showing. Like this:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6brxvy4l9lghc8p6oe82.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6brxvy4l9lghc8p6oe82.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Always parse hook names from source
&lt;/h3&gt;

&lt;p&gt;The second checkbox: Always parse hook names from source - is another way to show the names of your hooks from your source code in the development tools. By checking this checkbox you won’t have to click the wand icon to show the names, they will all show by default. &lt;/p&gt;

&lt;p&gt;Here is a hooks section without the checkbox checked:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Febi9eczv9gdm9kjba2uz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Febi9eczv9gdm9kjba2uz.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And here is the same hook section after checking this check box&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdmykmpiq4xv6pfn28lx6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdmykmpiq4xv6pfn28lx6.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I’ve highlighted in red the hook names (on the left-hand side) and the fact that there is no wand icon (on the right-hand side). Do note the warning that by checking this checkbox, the tools will be slower to run as there is more work to extract these names.&lt;/p&gt;

&lt;h3&gt;
  
  
  Open In Editor URL
&lt;/h3&gt;

&lt;p&gt;This section allows developers to click an icon and be taken to the source code of that component. For example, I will enter the default vs code setting (as shown as the placeholder text): &lt;em&gt;vscode://file/{path}:{line}&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Now, when viewing components, you can see a new icon here:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F80tpaghlgiksfmr8mu6p.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F80tpaghlgiksfmr8mu6p.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When I click on this icon I will be taken to VS Code (you may be prompted for a security warning by your browser) and the file containing the component will be opened.&lt;/p&gt;

&lt;p&gt;For example, if I wanted to view my landing page component, I would first select the component like this:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffr2j01okracpqxir2tun.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffr2j01okracpqxir2tun.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Then, once I’ve selected the component, I would click the Open in editor button from above.&lt;/p&gt;

&lt;p&gt;The editor is opened and I am taken to the component in question:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffvo29j67au5j5zx1y1t7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffvo29j67au5j5zx1y1t7.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Hide components where...
&lt;/h3&gt;

&lt;p&gt;The hide components section is a way for developers to reduce the number of components in the tree by use of a filter. By default, the standard HTML nodes are filtered, you can see this in the following image:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk0l6u03pob3ygyqli7jl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk0l6u03pob3ygyqli7jl.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;All dom nodes are hidden as this rule is switched on (the blue slider to the left of the panel indicates that the rule is in effect.&lt;/p&gt;

&lt;p&gt;If we turn off this rule you can see all the dom nodes shown in the React Dev Tools component tree like this:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcr10dlteja51b3xod6cz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcr10dlteja51b3xod6cz.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can see the dom nodes, div and img in the screenshot above. They are easy to spot as React components start with capital letters.&lt;/p&gt;

&lt;p&gt;The add filter button just allows more filter rules to be applied to the component tree.&lt;/p&gt;

&lt;h2&gt;
  
  
  Profiler Settings
&lt;/h2&gt;

&lt;p&gt;The &lt;em&gt;Profiler&lt;/em&gt; tab in settings relates to the Profiler tab in the dev tools. There are only two options in these settings:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd1bzeaiy2sq3rw44t7tj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd1bzeaiy2sq3rw44t7tj.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Record why each component rendered while profiling.
&lt;/h3&gt;

&lt;p&gt;The first checkbox allows the developer to see why a component has been rendered inside the profiler. If we check this box you can see profile information like below:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6l00ypinlm5b2r96a439.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6l00ypinlm5b2r96a439.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In this example, I have clicked on a Card component and the profiler now tells me that this rendered because the props changed.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq5pzvwkjtskgdo9j3dgd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq5pzvwkjtskgdo9j3dgd.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you click around the different components on different commits, you can see multiple reasons components were rendered. For example, if a component is rendered because its parent rendered, then you would see the following:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftvilpifk65izihbhwlmg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftvilpifk65izihbhwlmg.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Hide components below
&lt;/h3&gt;

&lt;p&gt;The second checkbox allows developers to filter out any component that took under a certain amount of time to render. This can be helpful when trying only to find slow components.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fklufcwk6x1am1gyqhpx5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fklufcwk6x1am1gyqhpx5.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In this example, I’ve set the time to 2ms. Performing the same action as in the previous example, my flamegraph looks quite different.&lt;/p&gt;

&lt;p&gt;Changing the hide commits below value will update the profile in real time if you have a profile already recorded. This can be handy for filtering out previously recorded commits.&lt;/p&gt;

&lt;p&gt;This should be enough information for anyone to get started with React Dev Tools in Firefox (and even Chrome, as the tools are almost identical).&lt;/p&gt;

&lt;h2&gt;
  
  
  Bonus
&lt;/h2&gt;

&lt;p&gt;Did you know that you can access React components from the console? If you select a component in the component tree, you can then go to the console and enter the command: &lt;em&gt;$r&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;This is how you can see all the information about how your component is loaded in the browser.&lt;/p&gt;

&lt;p&gt;Take the following example of the Beds component from earlier. I’ve selected the Beds component and entered $r in the console to get this:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuolbpwtcj0qntgdiy3ny.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuolbpwtcj0qntgdiy3ny.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As you can see, there is a lot of information here that you may want to access to debug issues in your applications (or even just to play with programmatically in the console).&lt;/p&gt;

&lt;p&gt;Please check out this and all my other articles over on &lt;a href="https://bernieslearnings.com" rel="noopener noreferrer"&gt;bernieslearnings.com&lt;/a&gt; Thanks for reading!&lt;/p&gt;

</description>
      <category>devtools</category>
      <category>webdev</category>
      <category>react</category>
      <category>javascript</category>
    </item>
  </channel>
</rss>
