[React] React를 활용하여 시간/분 , 킬로미터/마일 변환기 만들기

2023. 8. 1. 23:58·Frontend

밑 내용은 노마드코더의 'ReactJS로 영화 웹 서비스 만들기' 강의 중 일부 내용을 포함하고 있습니다.

React에 대해서 자세하고 친절하게 가르쳐주셔서 만족하면서 듣고 있습니다.

(밑에 링크로 들어가면 수강할 수 있습니다. 무료 강의 입니다.)

https://nomadcoders.co/react-for-beginners

 

ReactJS로 영화 웹 서비스 만들기 – 노마드 코더 Nomad Coders

React for Beginners

nomadcoders.co

 

이 강의을 듣다보면 Super Converter를 만들게 되는데,

Super Converter는 React의 State를 활용해서 시간/분 , 킬로미터/마일 중 변환하고 싶은 것을 골라 데이터를 입력하면 변환을 시켜주는 프로그램이다.

 

코드
<!DOCTYPE html>
<html>
    <body>
        <div id="root"></div>
    </body>
    <script src="https://unpkg.com/react@17.0.2/umd/react.production.min.js"></script>
    <script src="https://unpkg.com/react-dom@17.0.2/umd/react-dom.production.min.js"></script>
    <script src="https://unpkg.com/@babel/standalone/babel.min.js"></script>
    <script type="text/babel">
        function MinutesToHours() {
            const [amount, setAmount] = React.useState(0);
            const [inverted, setInverted] = React.useState(false);
            
            const onChange = (event) => {
                setAmount(event.target.value);

            };
            const reset = () => setAmount(0);
            const onInvert = () =>  {
                reset();
                setInverted((current) => !current);
            };
            return (
                <div>
                    <div>
                        <label htmlFor="minutes">Minutes</label>
                        <input
                        value={inverted ? amount * 60 : amount}
                        id="minutes"
                        placeholder="Minutes"
                        type ="number"
                        onChange = {onChange}
                        disabled={inverted}
                        />
                    </div>
                    <div>
                        <label htmlFor="hours">Hours</label>
                        <input
                            value={inverted ? amount :  Math.round(amount / 60)}
                            id= "hours" placeholder="Hours" type="number"
                            disabled={!inverted}
                            onChange = {onChange}
                        />
                    </div>
                    <button onClick={reset}>Reset</button>
                    <button onClick={onInvert}>{inverted ? "Turn Back" : "Invert"}</button>
                </div>
            );
        }
        function KmToMiles() {
            const [amount, setAmount] = React.useState(0);
            const [inverted, setInverted] = React.useState(false);
            
            const onChange = (event) => {
                setAmount(event.target.value);

            };
            const reset = () => setAmount(0);
            const onInvert = () =>  {
                reset();
                setInverted((current) => !current);
            };
            return (
                <div>
                    <div>
                        <label htmlFor="km">Km</label>
                        <input
                        value={inverted ? amount / 0.6214 : amount}
                        id="km"
                        placeholder="Km"
                        type ="number"
                        onChange = {onChange}
                        disabled={inverted}
                        />
                    </div>
                    <div>
                        <label htmlFor="miles">Miles</label>
                        <input
                            value={inverted ? amount :  amount * 0.6214}
                            id= "miles" placeholder="Miles" type="number"
                            disabled={!inverted}
                            onChange = {onChange}
                        />
                    </div>
                    <button onClick={reset}>Reset</button>
                    <button onClick={onInvert}>{inverted ? "Turn Back" : "Invert"}</button>
                </div>
            );
        }
        function App(){
            const [index, setIndex] = React.useState("xx");
            const onSelect = (event) => {
                setIndex(event.target.value);
            };
            console.log("render w/", index);
            return (
                <div>
                    <h1>Super Converter</h1>
                    <select value={index} onChange={onSelect}>
                        <option value="xx">Select your units</option>
                        <option value="0">Minutes & Hours</option>
                        <option value="1">Km & Miles</option>
                    </select>
                    {index === "0" ? <MinutesToHours /> : null}
                    {index === "1" ? <KmToMiles/> : null}
                </div>
            );
        }
        const root = document.getElementById("root");
        ReactDOM.render(<App />, root);
    </script>
</html>

 

실행결과

 

처음 사이트 화면이다.
select를 통하여 어떤 것을 변환하고 싶은 지 선택할 수 있다.


Invert를 클릭하여 무엇을 변환할 지 선택할 수 있다.

Minutes -> Hours 변환
Hours -> Minutes 변환


Km -> Miles 변환
Miles -> Km 변환


후기

이 프로그램을 만들면서 React의 State를 사용하는 법을 연습할 수 있었다.

그래도 아직 React를 다루는 것에 익숙하지 않다. 더 많은 연습이 필요하다.

이제 강의의 25%를 끝냈다. 다음 주까지 이 강의를 다 듣는 것이 목표다. 한 번 끝까지 해보자.

저작자표시 비영리 변경금지 (새창열림)

'Frontend' 카테고리의 다른 글

[React] createElement, ReactDOM, JSX에 대해서  (0) 2023.08.17
[React] npx create-react-app이 잘 실행되지 않는다면?(NPM 레지스트리 URL 에러)  (0) 2023.08.11
[Javascript] 코딩앙마의 자바스크립트 중급 강좌를 듣고  (0) 2023.07.18
[Javascript] 코딩앙마의 자바스크립트 기초 강좌를 듣고  (0) 2023.07.12
[CSS] CSS 예제를 풀어보자 - 소스코드 설명 페이지 만들기  (2) 2023.07.06
'Frontend' 카테고리의 다른 글
  • [React] createElement, ReactDOM, JSX에 대해서
  • [React] npx create-react-app이 잘 실행되지 않는다면?(NPM 레지스트리 URL 에러)
  • [Javascript] 코딩앙마의 자바스크립트 중급 강좌를 듣고
  • [Javascript] 코딩앙마의 자바스크립트 기초 강좌를 듣고
퀵차분
퀵차분
Web Developer 🥐
QC's DevlogWeb Developer 🥐
  • 퀵차분
    QC's Devlog
    퀵차분
  • 전체
    오늘
    어제
    • 분류 전체보기 (175) N
      • Frontend (30) N
      • Fedify (4)
      • Study (42)
        • NestJS (2)
        • Node.js (3)
        • Modern JS Deep Dive (13)
        • SQL (1)
        • Network (1)
        • 프롬프트 엔지니어링 (4)
        • 인공지능 (9)
        • 시스템프로그래밍 (11)
        • 선형대수학 (1)
      • Intern (4)
      • KUIT (21)
      • Algorithm (48)
        • Baekjoon(C++) (26)
        • Programmers(JavaScript) (22)
      • 우아한테크코스(프리코스) (4)
      • Project (8)
        • crohasang_page (1)
        • PROlog (4)
        • Nomadcoder (2)
      • 생각 (4)
      • Event (7)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    HTML
    typescript
    프로그래머스 자바스크립트
    티스토리챌린지
    인공지능
    react
    next.js
    알고리즘
    타입스크립트
    자바스크립트
    javascript
    KUIT
    오블완
    백준
    시스템프로그래밍
    음악추천
    프로그래머스
    리액트
    프론트엔드
    fedify
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
퀵차분
[React] React를 활용하여 시간/분 , 킬로미터/마일 변환기 만들기

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.