https://www.npmjs.com/package/react-signature-canvas?activeTab=readme
react-signature-canvas
A React wrapper component around signature_pad. Unopinionated and heavily updated fork of react-signature-pad. Latest version: 1.0.6, last published: 2 years ago. Start using react-signature-canvas in your project by running `npm i react-signature-canvas`.
www.npmjs.com
๊ณผ์ ์ค์ ์ ์์๋ช ๊ตฌํ์ด ์์ด์ ์ฐพ์๋ณด๋ค๊ฐ ์๊ฒ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค.
react-signature-canvas๋ฅผ ํ์ฉํด์ ์ ์์๋ช ์ ๊ฐ๋จํ๊ฒ ๊ตฌํํด๋ณด๊ฒ ๋ค.
์ฌ์ค ์ ๋ง ํด๋น ๊ธฐ๋ฅ์ ์ ํ์ฉํด์ ์ ๊ตฌํํด๋์ผ์ ๋ธ๋ก๊ฑฐ๋ถ๋ค์ด ๋ง์์
๋ด๊ฐ ๋ญ ์ถ๊ฐํ๊ฑฐ๋ ๋ฑํ ์๋ค.
๋์ ๊ฒฝ์ฐ์๋ react- hook -form์ ์ฌ์ฉํ๊ณ ์์ด์
๊ทธ formData์์ ์ ์์๋ช ์ผ๋ก ๋์จ ํ์ผ์ png๋ก ๋ณํํด์ ๋ฃ๊ณ ์ถ์๋ค.
๋คํํ ํด๋น ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ํ์ผ ๋ณํ ๊ธฐ๋ฅ์ ์ ๊ณตํ๊ณ ์์๊ธฐ์ ๋ ๋นจ๋๋ค.
npm i -S react-signature-canvas
ํ์ ์คํฌ๋ฆฝํธ ์ฌ์ฉํ๋ ๋ถ๋ค์
https://www.npmjs.com/package/@types/react-signature-canvas
@types/react-signature-canvas
TypeScript definitions for react-signature-canvas. Latest version: 1.0.5, last published: 10 months ago. Start using @types/react-signature-canvas in your project by running `npm i @types/react-signature-canvas`. There are 20 other projects in the npm regi
www.npmjs.com
npm install --save @types/react-signature-canvas
์ผ๋ก๋ ์ค์น๊ฐ ํ์ํ๋ค.
export function Signature(props: SignatureCanvasType): JSX.Element {
const canvasRef = useRef<any>(null);
const [isSigned, setIsSigned] = useState<boolean>(false);
// ํ์ผ ์ด๋ฆ ์์ฑ
const generateFileName = (userName: string): string => {
return `signature_${userName}_${Date.now()}`;
};
// dataURL -> File ๋ณํ
const convertDataUrlToFile = (name: string): File => {
const dataURL = canvasRef.current.toDataURL('image/png');
const decodedURL = dataURL.replace(/^data:image\/\w+;base64,/, '');
const buf = Buffer.from(decodedURL, 'base64');
const blob = new Blob([buf], { type: 'image/png' });
return new File([blob], `${name}.png`, { type: 'image/png' });
};
const onSave = (): void => {
const dataName = generateFileName('name');
const file = convertDataUrlToFile(dataName);
// console.log(file);
};
return (
<CanvasContainer>
<CanvasWrapper>
{!isSigned && (
<CanvasPlaceholder>
์ฌ๊ธฐ์ ์๋ช
์ ํด์ฃผ์ธ์.
</CanvasPlaceholder>
)}
<ReactSignatureCanvas
ref={canvasRef}
canvasProps={{
width: 400,
height: 200,
className: 'sigCanvas',
}}
onBegin={(): void => {
setIsSigned(true);
}}
/>
</CanvasWrapper>
<div className="signature-btn">
<button
className="add"
type="button"
onClick={(): void => {
canvasRef.current.clear(); // ๋ฆฌ์
setIsSigned(false);
}}
>
์๋ช
์ด๊ธฐํ
</button>
<button
disabled={!isSigned}
type="button"
onClick={(): void => onSave()}
>
์ ์ฅ
</button>
</div>
</CanvasContainer>
);
}
css
export const CanvasContainer = styled.div`
display: flex;
flex-direction: column;
align-items: end;
.signature-btn {
margin-top: 20px;
display: flex;
gap: 10px;
button {
padding: 10px 20px;
font-size: 14px;
color: white;
background-color: ${colors.primary[5]};
border: none;
border-radius: 8px;
cursor: pointer;
transition: background-color 0.3s ease;
&:hover {
background-color: ${colors.primary[4]};
}
&:focus {
outline: none;
box-shadow: 0 0 0 2px ${colors.primary[5]};
}
&:disabled {
background-color: ${colors.neutral[4]};
}
}
}
`;
export const CanvasWrapper = styled.div`
position: relative;
`;
export const CanvasPlaceholder = styled.div`
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
color: black;
`;
๊ฒฐ๊ณผ๋ฌผ



๋ง์ฝ์ ์ค์ ๋ก ์ฌ์ฉํ๊ฒ๋๋ค๋ฉด
ํ์ผ์ด๋ฆ์ ๋ํด์ ์ข ๋ ๊ณ ๋ฏผ์ ํด๋ณด๊ณ ์ถ๋ค.
uuid๋ฅผ ํ์ฉํด์ ์ ๋ํฌํ ์ด๋ฆ์ ์ค์ ํ๋ ๋ฐฉ๋ฒ๋ ์๋๋ฐ
๋ค์์ ์ด ๋ฐฉ๋ฒ๋ ์จ๋ด์ผ์ง
https://www.npmjs.com/package/uuid
uuid
RFC9562 UUIDs. Latest version: 10.0.0, last published: 3 months ago. Start using uuid in your project by running `npm i uuid`. There are 65226 other projects in the npm registry using uuid.
www.npmjs.com
๋ฆฌ์กํธ์์ signature-pad๋ก ์๋ช ํ๊ธฐ, react-signature-canvas์ placeholder ๋ฃ๊ธฐ
ํ์ฌ์์ ์ค๋ฌธ ์ ์ ์ ์ ํํ ์ ์๋ ์๋ก์ด ๋ฌธํญ ์ข ๋ฅ๋ก `์๋ช ์ ๋ ฅ`์ ๋ฐ์ ์ ์๋ ๋ชจ๋์ ๊ตฌํํ๊ฒ ๋๋ค. ์๋ช ์ ๋ ฅ ๋ฐ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ค ๊ฐ์ฅ ๋ํ์ ์ผ๋ก ์ฌ์ฉ๋๊ณ ์๋ signature-pad๋ฅผ ๋ฆฌ์ก
jiyoon-park.tistory.com
๊ฐ์ฌํฉ๋๋ค(๊พธ๋ฒ !)
'STUDY' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [๋ผ์ด๋ธ๋ฌ๋ฆฌ] react-spring ์ ๋๋ฉ์ด์ ๊ตฌํ (1) | 2024.09.29 |
|---|---|
| [๋ผ์ด๋ธ๋ฌ๋ฆฌ] react hook form ์ ํจ์ฑ ๊ฒ์ฌํ๋ ํผ ๋ง๋ค๊ธฐ (2) | 2024.09.18 |
| <E2E ํ ์คํธ> playwright E2E ํ ์คํธ ๋ฐ ๊นํ๋ธ CI ์ค์ ํ๊ธฐ (1) | 2024.09.14 |
| axios ์ธ์คํด์ค (0) | 2024.09.10 |
| session ๋ฐฉ์์ ๊ฐ๋ ๋ฐ ํ๊ณ์ JWT token ์ธ์ฆ ๋ฐฉ์ (0) | 2024.09.04 |