loading...

React Dev Tools — Debug Like a Ninja

flexdinesh profile image Dinesh Pandiyan Originally published at Medium ・6 min read

React Dev Tools — Debug Like a Ninja

Hands down console.log() was, is and will always be the greatest debugging tool of all time.

React team launched a new version of the React Dev Tools (v4) a few weeks ago and it’s fantabulous. It gives you debugging superpowers to navigate through your tree, trace data flow, spot weak links and optimise for perf.
There are two separate tabs (Components, Profiler) now as opposed to the old version which had only one React tab.

Dev Tools

New Dev Tools has great many improvements over the old version. To highlight a few —

  • 🏎 Faster
  • 🎣 Hooks support
  • 🧐 Advanced tree filter
  • 🤠 Better search UX
  • 👮‍♀️ Badges for HOCs
  • 🎯 Remembers selection after page reload

Top 10 Features

Dev Tools can do a lot of things. We’re are not going to dive into the nitty gritty details of each and every feature. Instead we’ll take a look at the top 10 helpful features that help us save time and write better React code.

Components Tab

  1. Live edit state/props
  2. Search through tree
  3. Advanced tree filter
  4. Rendered by
  5. Owners tree
  6. Quick Navigation
  7. Utils

Profiler Tab

  1. Profile initial mount
  2. Why did this render?
  3. Rendered at

1. Live Edit State/Props

You can live edit the state and props of a component and instantly see the results in the page.

live edit state/props

Since the gif is broken, you can view it here.

2. Search Through Tree

The search bar comes handy when you want to quickly find and jump to a component in the tree. Now that the Dev Tools can remember stuff the selected node is saved between reloads and you don’t have to repeat the action every time you reload the page.

search through tree

3. Component Filter

Filter is a powerful feature to reduce visual noise and focus on what matters at the moment in a huge tree. You can filter with a variety of options like context, HOCs, host(DOM) nodes, component name, etc.

component filter

4. Rendered By

Rendered By is a list of owner/parent components that rendered the selected component. You can quickly jump to a parent component by selecting an entry from the list.

rendered by

5. Owners Tree

Owners Tree gives you an eagle eye view of a particular component and its sub-tree and hides the rest of the component tree.

To enter into owners tree view, you have to double click a component in the tree.

owners tree

6. Quick Navigation

Switching between Elements tab (browser dev tools) and Components tab (react dev tools) is pretty easy and the corresponding node is auto selected in these tabs.

To find the corresponding DOM node in the Elements tab, select the component and click the small eye icon on the right pane. It will take you to the Elements tab with the corresponding DOM node selected.

To find the corresponding React node from Elements tab, just select a node in Elements tab and click the Components tab. React Dev Tools will automatically select the corresponding component.

quick navigation

7. Utils

Components tab offers three small handy utils.

  1. Suspend component
  2. Inspect matching DOM element
  3. Log component data to console

Suspend Component

You can easily switch between the waiting(loading) and resolved states of Suspense components.

suspend component

Inspect matching DOM element

We already saw this in Quick Navigation. You can select a component and click the eye icon on the right pane to jump to its corresponding node in Elements tab to inspect it.

inspect element

Log component data to console

This is a handy utility that logs the entire component meta data to the console. The log gives details like props, hooks, corresponding DOM nodes and the component file location in the file system.

To log component data to console, select the component and click the small bug icon in the right pane.

log component data


Intro to Profiler

The next three features are going to be about the Profiler. Before diving into them, we’ll take a look at how profiler works and the key metrics that are used during profiling.

Every profiling session has two important colour graphs —

  1. Commit graph
  2. Component graph

intro to profiler

Commit Graph

Commit graph gives you a list of commits (whole tree) during the session. Each commit denotes a user activity or side-effect that triggered a render in the tree.You will see it coloured from orange to green with orange denoting the costliest (took most time) commit and green denoting the cheapest (took least time) commit.

Component Graph

Component graph gives you info on which component rendered during a single commit. You can select each commit from the commit graph to see its component graph. It is also colour coded with cost information —

  1. Dark Grey — Component did not render but a part of its sub-tree rendered
  2. Transparent GreyNeither the component nor its subtree rendered
  3. ColouredBoth the component and its entire subtree rendered

8. Profile Initial Mount

Initial mount and first render is usually a perf heavy op in most React applications. In older versions of Dev Tools, it was impossible to profile and audit the initial mount phase. But the latest version provides an option to profile and audit the initial mount.

profile initial mount

9. Why Did This Render?

This is the most powerful feature of the Dev Tools yet and it tells you why a component rendered during a profiling session. A component might have rendered for one or many of these reasons —

  1. Props changed
  2. State changed
  3. Hooks changed
  4. Parent component rendered

You can profile an activity and see why a component rendered during the profiling session to spot weak links and prevent unnecessary renders in the tree.

why did this render

Note: You have check this setting — “Record why each component rendered while profiling” to see this info in the right pane of the Profiler Tab.

10. Rendered At

Rendered At info on the right pane gives you two time metrics —

  1. When exactly the component rendered during the profiling session
  2. How long it took for the component to render during the profiling session

Eg. 2.2s for 2.3ms

Here, 2.2s means the component rendered at 2.2s(2200ms) from the start of the profiling session which is 0s. And 2.3ms is the amount of time it took for the component to render.

rendered at

Since the gif is broken, you can view it here.

That’s all folks.

If you’re interested in exploring all the features, the React team has built a site just for that — Interactive Dev Tools.

Play around with Dev Tools and drop a comment below or start a conversation with the author in Twitter on what you think.

This post is a cross post of the original post from The Thinkmill Blog.

Posted on by:

flexdinesh profile

Dinesh Pandiyan

@flexdinesh

Engineer | Speaker | Blogger | OSS | I build things ☕

Discussion

markdown guide
 

This was very nice post, Dinesh~

I have a question regarding the example in 10. Rendered At.

demo

Are those seconds, 2.2s, 3.0s, and 3.6s above the time when you typed 123 for password since you started profiling?
and each corresponding milliseconds, 2.3ms, 1.4ms, and 2.1ms represent time it took to render the component?

 

That's right. I've briefly mentioned it in the post under the same heading.

2.2s, 3.0s, 3.6s denote the linear time at which the re-rendering completed since the start of the profiling session. And the 2.3ms, 1.4ms and 2.1ms denote how long it took for each re-render.

 

Thank you, Dinesh.

Now I dig the new React Dev Tools

 

Awesome post! I use it most of the time but just for basic stuff.
The topic with "Log component data to console" was new to me and veeeeery nice, because previously I was using console.log() statements in my code 😅