TIL

[TIL] 클립보드 복사하기 (feat.React)

DDINYOUNG 2023. 6. 28. 14:28

채팅방 코드를 클릭하면 클립보드에 복사되는 기능을 만들어보았다.

 

처음 시도했던 방법은 navigator를 이용하여 클립보드 복사하기.

 

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

  const handleCopyClipBoard = (text) => {
    try {
      navigator.clipboard.writeText(text);
      setCopied(true);
      setTimeout(() => setCopied(false), 1500);
    } catch (error) {
      alert('클립보드 복사에 실패하였습니다.');
    }
  };

 

너무 간편하고 잘 작동했지만 왜인지 배포환경에선 작동하지 않음.

이유는 localhost환경과 https환경에서만 작동하기때문이었다. (IE에서도 작동하지 않음)

이걸 사용한 프로젝트는 http환경이라 작동을 안 했다...

 

두번째 방법은 라이브러리 설치!

굳이 라이브러리를 설치해야될까 고민하고 찾아봤지만.. 시간도 없고 편리한 라이브러리를 찾아서 설치했다.

https://www.npmjs.com/package/react-copy-to-clipboard

 

react-copy-to-clipboard

Copy-to-clipboard React component. Latest version: 5.1.0, last published: a year ago. Start using react-copy-to-clipboard in your project by running `npm i react-copy-to-clipboard`. There are 1466 other projects in the npm registry using react-copy-to-clip

www.npmjs.com

 

먼저 라이브러리를 설치해준다

 yarn add react-copy-to-clipboard
 
 npm install --save react-copy-to-clipboard

 

import { CopyToClipboard } from 'react-copy-to-clipboard';

<CopyToClipboard text={roomCode} onCopy={handleCopyClipBoard}>
	<button className={copied === true ? 'success' : ''}>
		<span>#</span>&nbsp;{roomCode}
	</button>
</CopyToClipboard>

 

라이브러리를 설치하고 CopyToClipboard 태그안에 버튼을 넣어놓고
text에는 복사할 대상을 넣어주고 onCopy는 copy가 성공했을 경우의 동작을 감지한다.

나의 경우는 복사가 성공했을 때 표시를 해주기위해 함수를 넣어주었다. 

 

 

그 결과,

http환경에서도 잘 동작한다!!