Effective Debugging Techniques for React JS: Debugging Doesn’t Have to Be a Drag!

Ashok Naik - Jun 30 - - Dev Community

Hey there, fellow React JS developer! 🧑‍💻

We’ve all been there: you’re cruising along, building your latest and greatest app, when suddenly… BAM! An error message pops up out of nowhere. Panic sets in. But fear not! Debugging doesn’t have to be a drag. In fact, with the right techniques, it can be as smooth as butter on a hot pancake. So, grab your favorite beverage, sit back, and let’s dive into the wonderful world of advanced React JS debugging!

  1. React Developer Tools to the Rescue Imagine having X-ray vision for your React components. That’s exactly what React Developer Tools offer. This browser extension (available for Chrome and Firefox) lets you inspect the component hierarchy, check props and state, and even tweak them on the fly.

2.The Power of Breakpoints
Forget console.log() for a moment and embrace the power of breakpoints. Set breakpoints in your code using your browser’s developer tools, and watch your code pause at just the right moment.

3.Linting with ESLint
ESLint is your best friend when it comes to catching errors before they even happen. It’s like having a vigilant coding buddy who points out potential issues as you type.

npm install eslint --save-dev
Enter fullscreen mode Exit fullscreen mode

4.The ComponentDidCatch Magic
Ever wished you could catch errors in your components and handle them gracefully? Enter componentDidCatch. This lifecycle method allows you to catch errors in any child component and display a custom error message.

class ErrorBoundary extends React.Component {
  state = { hasError: false };

  componentDidCatch(error, info) {
    this.setState({ hasError: true });
    // Log the error to an error reporting service
    console.error(error, info);
  }

  render() {
    if (this.state.hasError) {
      return <h1>Something went wrong.</h1>;
    }

    return this.props.children;
  }
}
Enter fullscreen mode Exit fullscreen mode

5.React.lazy and Suspense for Code Splitting
React.lazy and Suspense enable you to load components lazily through code splitting. This can help with debugging by isolating component loading issues.

const OtherComponent = React.lazy(() => import('./OtherComponent'));

function MyComponent() {
  return (
    <div>
      <Suspense fallback={<div>Loading...</div>}>
        <OtherComponent />
      </Suspense>
    </div>
  );
}

Enter fullscreen mode Exit fullscreen mode

6.React's useDebugValue for Custom Hooks
When you create custom hooks, you can use the useDebugValue hook to display a label in React DevTools for easier debugging.

function useFriendStatus(friendID) {
  const [isOnline, setIsOnline] = useState(null);

  useDebugValue(isOnline ? 'Online' : 'Offline');

  useEffect(() => {
    function handleStatusChange(status) {
      setIsOnline(status.isOnline);
    }

    ChatAPI.subscribeToFriendStatus(friendID, handleStatusChange);
    return () => {
      ChatAPI.unsubscribeFromFriendStatus(friendID, handleStatusChange);
    };
  }, [friendID]);

  return isOnline;
}



Enter fullscreen mode Exit fullscreen mode

And there you have it! Debugging doesn’t have to be a nightmare. With these effective techniques, you’ll be squashing bugs and fine-tuning your React JS apps like a pro. Happy coding! 🐞🚀

Feel free to share your own debugging tips in the comments below!

. . . . . . . . . . . . . . . . .