React useCopyToClipboard Hook

ReactReactBeginner
Practicar Ahora

This tutorial is from open-source community. Access the source code

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

Introducción

En este laboratorio, aprenderemos a usar el hook useCopyToClipboard en React para copiar un texto dado al portapapeles. Este hook es útil para implementar una funcionalidad de "copiar al portapapeles" en aplicaciones web. También veremos cómo usar los hooks useState, useCallback y useEffect en esta implementación.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL react(("React")) -.-> react/FundamentalsGroup(["Fundamentals"]) react(("React")) -.-> react/AdvancedConceptsGroup(["Advanced Concepts"]) react(("React")) -.-> react/StateManagementGroup(["State Management"]) react/FundamentalsGroup -.-> react/jsx("JSX") react/FundamentalsGroup -.-> react/event_handling("Handling Events") react/AdvancedConceptsGroup -.-> react/hooks("React Hooks") react/StateManagementGroup -.-> react/use_state_reducer("Using useState and useReducer") subgraph Lab Skills react/jsx -.-> lab-38377{{"React useCopyToClipboard Hook"}} react/event_handling -.-> lab-38377{{"React useCopyToClipboard Hook"}} react/hooks -.-> lab-38377{{"React useCopyToClipboard Hook"}} react/use_state_reducer -.-> lab-38377{{"React useCopyToClipboard Hook"}} end

React useCopyToClipboard Hook

index.html y script.js ya se han proporcionado en la VM. En general, solo es necesario agregar código a script.js y style.css.

Para copiar el texto dado al portapapeles, use el fragmento de código copyToClipboard proporcionado en /js/s/copy-to-clipboard/ junto con el hook useState() para inicializar la variable copied. Para crear una devolución de llamada para el método copyToClipboard, use el hook useCallback(). Para restablecer la variable de estado copied cuando cambie el text, use el hook useEffect(). Finalmente, devuelva la variable de estado copied y la devolución de llamada copy.

El siguiente código demuestra un ejemplo de cómo usar estos hooks y métodos para crear un componente TextCopy. Cuando el usuario hace clic en el botón "Haz clic para copiar", se llama a la función copy y la variable copied se establece en true. Si la copia es exitosa, se mostrará "¡Copiado!".

const useCopyToClipboard = (text) => {
  const copyToClipboard = (str) => {
    const el = document.createElement("textarea");
    el.value = str;
    el.setAttribute("readonly", "");
    el.style.position = "absolute";
    el.style.left = "-9999px";
    document.body.appendChild(el);
    const selected =
      document.getSelection().rangeCount > 0
        ? document.getSelection().getRangeAt(0)
        : false;
    el.select();
    const success = document.execCommand("copy");
    document.body.removeChild(el);
    if (selected) {
      document.getSelection().removeAllRanges();
      document.getSelection().addRange(selected);
    }
    return success;
  };

  const [copied, setCopied] = React.useState(false);

  const copy = React.useCallback(() => {
    if (!copied) setCopied(copyToClipboard(text));
  }, [text]);

  React.useEffect(() => () => setCopied(false), [text]);

  return [copied, copy];
};

const TextCopy = (props) => {
  const [copied, copy] = useCopyToClipboard("Lorem ipsum");

  return (
    <div>
      <button onClick={copy}>Click to copy</button>
      <span>{copied && "Copied!"}</span>
    </div>
  );
};

ReactDOM.createRoot(document.getElementById("root")).render(<TextCopy />);

Haga clic en 'Go Live' en la esquina inferior derecha para ejecutar el servicio web en el puerto 8080. Luego, puede actualizar la pestaña Web 8080 para previsualizar la página web.

Resumen

¡Felicitaciones! Has completado el laboratorio del hook React useCopyToClipboard. Puedes practicar más laboratorios en LabEx para mejorar tus habilidades.