-
Notifications
You must be signed in to change notification settings - Fork 2
세림 데일리스크럼
Serim Min edited this page Jul 21, 2023
·
4 revisions
- Vite : 빠르고 간결한 모던 웹 프로젝트 개발 경험에 초점을 맞춰 탄생한 빌드 도구
- CRA를 사용했을 때보다, 빠르게 프로젝트가 생성되어 선택함.
- 참고 자료 : https://yozm.wishket.com/magazine/detail/1620/
meaningout-client
├── node_modules
├── public
└─ assets
├── src
├─ components
├─ pages
├─ App.jsx
├─ index.css
└─ main.jsx
├── .eslintrc.cjs
├── .gitignore
├── index.html
├── package.json
├── vit.config.js
└── README.md
- MakePage.jsx에 초안을 구현함
![](https://private-user-images.githubusercontent.com/97885933/254590987-48183b65-0830-4d00-bd79-e50d45e081d9.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzg4ODE1NTQsIm5iZiI6MTczODg4MTI1NCwicGF0aCI6Ii85Nzg4NTkzMy8yNTQ1OTA5ODctNDgxODNiNjUtMDgzMC00ZDAwLWJkNzktZTUwZDQ1ZTA4MWQ5LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMDYlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjA2VDIyMzQxNFomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTk1NGZlZDc3N2ZhYzlmMzljNTIwNWFkNmVlZjVmYTFlODUxN2I3NWQ3YTQ4YTYwODljMWRiMTIxNzE0NWExMzYmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.ACnsTtIB3hJWWcT52TILxQOfMR8-w14kGmFDPTBVefw)
기획안을 살펴보면...
- input 태그에 입력을 한 후, '다음으로' 버튼을 클릭하면
- input 태그에 입력한 내용이 div 태그 안에 반영되게 해야한다.
![MakePage wireframe](https://private-user-images.githubusercontent.com/97885933/254593422-175794bc-c8cb-49b4-9006-0ca1401f89ee.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzg4ODE1NTQsIm5iZiI6MTczODg4MTI1NCwicGF0aCI6Ii85Nzg4NTkzMy8yNTQ1OTM0MjItMTc1Nzk0YmMtYzhjYi00OWI0LTkwMDYtMGNhMTQwMWY4OWVlLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMDYlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjA2VDIyMzQxNFomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTIwZTkzOTk1MDJjZDM2MGFhMmI2ZjYwZGMzM2U5MDc0NDU5MWNiMWNkODFmM2VkMWI1OTRhZjI2YTNiNGM0ZmQmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.FGLTV2gSTzGqX4FgGtHtrCszVS5icY7ajXBNS15rB-I)
아래 코드와 같이, 간단하게 기능만 구현을 해보았다.
import { useState } from 'react';
const MakePagePractice = () => {
const [inputValue, setInputValue] = useState('');
const [showCompelete, setShowCompelete] = useState(false);
const handleChange = (e) => {
setInputValue(e.target.value);
};
const handleComplete = () => {
setShowCompelete(true);
};
const handleSave = () => {
// 여기에 저장 기능을 구현
console.log('Save the content:', inputValue);
};
return (
<div>
{showCompelete ? (
<div>
<div>{inputValue}</div>
<button onClick={handleSave}>저장하기</button>
</div>
) : (
<div>
<input type='text' value={inputValue} onChange={handleChange} />
<button onClick={handleComplete}>완성하기</button>
</div>
)}
</div>
);
};
export default MakePagePractice;
![image](https://private-user-images.githubusercontent.com/97885933/254866914-80e879c0-22b6-47f6-b678-db96a74cc398.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzg4ODE1NTQsIm5iZiI6MTczODg4MTI1NCwicGF0aCI6Ii85Nzg4NTkzMy8yNTQ4NjY5MTQtODBlODc5YzAtMjJiNi00N2Y2LWI2NzgtZGI5NmE3NGNjMzk4LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMDYlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjA2VDIyMzQxNFomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTUwMjkzNjE5ZTkzYjg1NDc0NGU3M2VmNDkxY2JlZTU3YTg1M2ZkMzA5MTRlODc0MTc4Zjk4MmNkZjRiOGIyYzkmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.CG2_emKLzf9yNnnJGnCu99M9DXFLcpoU4X0efn5K8vU)
![image](https://private-user-images.githubusercontent.com/97885933/254866866-3677b3f0-bdb6-4fb4-97e0-9ed7627ccbaa.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzg4ODE1NTQsIm5iZiI6MTczODg4MTI1NCwicGF0aCI6Ii85Nzg4NTkzMy8yNTQ4NjY4NjYtMzY3N2IzZjAtYmRiNi00ZmI0LTk3ZTAtOWVkNzYyN2NjYmFhLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMDYlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjA2VDIyMzQxNFomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWJjM2I2YmNjMDk2MThiN2ExNDAyMTk0MjZjMmE2NTg5YTU3Mzk1ZTVlMWRkMWEwYTMzZGU4ZWQxODE1ZDU3NjUmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.LPdthriOW67mK4064LYM_OsGOqnwTAHGVu4jL6MDD68)
카드 제작 후 카드를 다운로드하는 기능이 있음.
따라서 컴포넌트를 다운로드 하는 것을 구현함.
dom-to-image, FileSaver 라이브러리를 사용하기로 함.
const cardRef = useRef();
const onDownloadBtn = () => {
const card = cardRef.current;
const filter = (card) => {
return card.tagName !== 'BUTTON';
};
domtoimage
.toBlob(card, { filter: filter })
.then((blob) => {
saveAs(blob, 'card.png');
});
};
참고 자료 : https://onlydev.tistory.com/75
저번에 구현한 'input 입력 후, div 태그에 나타내기'를 프로젝트에 적용하고 있음.