Creating a custom useCopyToClipboard hook for copying text to clipboard

One common task in web development is copying text to the clipboard. In this tutorial, we will create a custom React hook called useCopyToClipboard that abstracts this functionality and provides an easy-to-use way to copy text to the clipboard.

Table of Contents

What is a React hook?

React hooks allow developers to add state and lifecycle events to functional components. They were introduced in React 16.8 and provide a simpler way to manage stateful logic in functional components.

Copying text to clipboard

To copy text to the clipboard in JavaScript, we can use the Clipboard API, which provides a standardized way to interact with the clipboard. The Clipboard.writeText() method allows us to copy text to the clipboard.

Creating the useCopyToClipboard hook

Let’s start by creating a new file called useCopyToClipboard.js and define our useCopyToClipboard hook:

import { useState } from 'react';

const useCopyToClipboard = () => {
  const [isCopied, setIsCopied] = useState(false);

  const copyToClipboard = (text) => {
    navigator.clipboard.writeText(text)
      .then(() => {
        setIsCopied(true);
      })
      .catch((error) => {
        console.error('Failed to copy text to clipboard:', error);
      });
  };

  return [isCopied, copyToClipboard];
};

export default useCopyToClipboard;

In our useCopyToClipboard hook, we use the useState hook to manage the state of whether the text has been copied or not. We also define a function copyToClipboard that takes the text to be copied as an argument. Inside this function, we use the Clipboard.writeText() method to copy the text to the clipboard. If the copy is successful, we set the isCopied state to true. Otherwise, we log an error message to the console.

Using the useCopyToClipboard hook

Now, let’s use our useCopyToClipboard hook in a component. Here’s an example of how you can use it:

import useCopyToClipboard from './useCopyToClipboard';

const CopyToClipboardExample = () => {
  const [isCopied, copyToClipboard] = useCopyToClipboard();

  const handleCopy = () => {
    copyToClipboard('Text to be copied');
  };

  return (
    <div>
      <button onClick={handleCopy}>Copy to Clipboard</button>
      <p>{isCopied ? 'Text copied!' : 'Click the button to copy'}</p>
    </div>
  );
};

export default CopyToClipboardExample;

In our example component, we import and use the useCopyToClipboard hook. We destructure the isCopied state and the copyToClipboard function from the hook’s return value. We also define a handleCopy function that calls copyToClipboard with the text we want to copy. Finally, we render a button and a paragraph that displays the copy status depending on the value of isCopied.

Conclusion

Creating a custom useCopyToClipboard hook allows us to easily integrate copy to clipboard functionality in our React components. Instead of writing repetitive code for each component that needs to copy text, we can simply use this reusable hook. This improves code reusability, reduces duplication, and promotes cleaner, more maintainable code.

Give it a try, and start simplifying the process of copying text to the clipboard in your React projects!

#React #ClipboardAPI