요구사항

- 버튼 컴포넌트를 만들어 재사용 가능하게 만들어라
- 아이콘 컴포넌트를 만들어 재사용 가능하게 만들어라
- 컴포넌트를 분리하여라
해결
1. src/main.js 파일에서 렌더링 준비를 한다.
1 | const container = document.querySelector('root'); |
- 업로드 버튼 컴포넌트의 type, content를 지정해주어 컴포넌트를 재사용할 수 있다.
- 사용자가 컴포넌트를 사용하려면 type과 content를 입력하여 아이콘과 내용을 적어주면 된다.
2. 버튼 컴포넌트 생성
1 | const Button = props => { |
- 버튼 컴포넌트에게 전달받은 props의 type값을 그대로 Icon 컴포넌트에게 전달해주었다.
- props 객체로 전달받은 type값에 따라 조건부로 disable 속성을 등록/해제 해주었다.
3. 아이콘 컴포넌트 생성
1 | const icons = { |
- props 객체로 전달받은 type 값을 가지고 상황에 맞는 아이콘을 보여주고 그에 따라 스타일링도 해주었다.
- icons 객체에 props 객체로 받은 타입에 대한 값을 저장하여 관리하였다.
4. 컴포넌트 분리
이 모든 코드가 한 파일에 있기에 이를 컴포넌트 단위와 역할별로 구분해주어야 한다.
1 | // ./main.js |
1 | // ./components/UploadButton.js |
1 | // ./components/Icon.js |
- 모듈이 하나의 개체로 이루어져 있으므로 기본 내보내기를 해주었다.
- 기본 내보내기를 해주었으므로 import시 이름을 변경하여 가져올 수 있다.
💪 맞닥뜨린 문제
1. 리액트 import 오류

1 | import {createRoot, StrictMode} from './react.js'; |
위와 같이 import를 해오고 싶었지만
그러므로 ReactDOM, React로 객체처럼 사용해야만 했다.
🏓 소감
간단한 업로드 버튼 컴포넌트를 구현하는 과제를 해보면서 리액트와 좀 더 친숙해지는 계기가 된 것 같다. figma 시안이 워낙 꼼꼼하게 잘 나와있어서 스타일링 하는데는 큰 어려움 없이 해서 좋았다.
처음 딱 시작하려는 순간부터 오류를 맞이해서 당황하였지만 문제도 잘 해결했고 SVG 파일에 애니메이션과 스타일을 입혀보는 것을 직접 해보니 더 기억에 오래 남을 것 같다.